일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 기울기
- 신경망 학습
- FastAPI
- PHP
- 우분투
- PICO CTF
- 신경망
- 오차역전파법
- PostgreSQL
- 코딩
- 소프트맥스 함수
- flag
- Apache2
- Python
- picoCTF
- sgd
- 아파치
- CTF
- 딥러닝
- Python Challenge
- 리뷰
- C언어
- 순전파
- AdaGrad
- 역전파
- 설치
- 파이썬
- 책
- HTML
- 백준
- Today
- Total
목록딥러닝 (8)
Story of CowHacker
이번에는 저번에 알아본 모멘텀 보다 더 발전한 AdaGrad에 대해 알아보겠다. AdaGrad란? 개별 매개변수에 적응적으로 학습률을 조정하면서 학습을 진행한다. 그림 1은 AdaGrad를 수식으로 표현한 것이다. W는 갱신할 가중치 매개변수다. ∂L/∂W은 W에 대한 손실 함수의 기울기다. η는 학습률을 뜻한다. h는 기존 기울기 값을 제곱하여 계속 더해준다. 매개변수를 갱신할 때 1/루트 h을 곱해 학습률을 조정한다. 이제 이것을 파이썬 코드로 구현해보겠다. AdaGrad 코드 import numpy as np class AdaGrad: """AdaGrad""" def __init__(self, lr=0.01): self.lr = lr self.h = None def update(self, param..
다시 한번 신경망 학습의 절차를 보겠다. 전제 신경망에는 가중치와 편향이 있고, 이 가중치와 편향을 훈련 데이터에 적응하도록 조정하는 과정을 학습이라고 한다. 1단계 - 미니 배치 훈련 데이터 중 일부를 무작위로 가져온다. 손실 함숫값을 줄이는 것이 목표다. 2단계 - 기울기 산출 미니 배치의 손실 함숫값을 줄이기 위해 각 가중치 매개변수의 기울기를 구한다. 3단계- 매개변수 갱신 가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다. 4단계 - 반복 1 ~ 3 단계를 반복한다. 지금까지 알아온 오차 역전파법은 2단계 기울기 산출에 속한다. 이제 오차 역전파법을 본격적으로 구현할 차례다. 먼저 2층 신경망에서 클래스의 인스턴스 변수와 메서드를 알아보겠다. 이제 그림 1과 그림 2를 참고해 클래스 코드를 ..
이번 글에서는 먼저 Affine 에대해 알아보겠다. Affine 계층이란? 신경망의 순전파 때 수행한 행렬의 곱을 기하학에서는 Affine계층이라고 불린다. 그림1을 보면 행렬의 곱에서 대응하는 차원의 원소 수를 일치 시킨다는걸 볼수있다. 그림2 는 Affine계층의 계산 그래프를 나타낸것이다. X, W, B가 행렬이라는 점에 주의해야한다. 지금까지의 계산 그래프트 노드 사이에 스칼라값이 흘렀는데 이 예에서는 행렬이 흐르고 있다. 이제 그림2의 역전파를 식으로 나타내보겠다 이제 계산그래프로 나타 내보겠다. 그림4를 보면 1, 2로 표시 된곳이 있는데 그것은 바로 그림5는 1 그림6은 2다. 지금까지 봐온 Affine계층은 입력 데이터로 X 하나만 고려한 것이였다. 이번에는 데이터 N개를 묶어 순전파 하는..
이번 글에서는 먼저 연쇄 법칙에 대해서 알아볼 것이다. 연쇄 법칙이란? 합성 함수의 미분은 합성 함수를 구성하는 각 함수의 미분의 곱으로 나타낼 수 있다. 여기서 합성 함수가 뭔지 알아야만 한다. 합성함수란? 여러 함수로 구성된 함수다. 그림 1의 식은 그림 2처럼 두 개의 식으로 구성된다. 다음은 역전파에 대해서 알아보겠다. 역전 파는 연쇄 법칙이랑 같은 원리다. 먼저 덧셈 노드의 역전파에 대해 알아보겠다. z = x + y 라는 식을 미분해보면 그림 3처럼 된다. 이것을 계산 그래프로 표현하면 그림 4는 순 전파를 나타낸 것이고, 그림 5는 역전파를 나타낸 것이다. 그림 5에서 상류에서 전해진 미분에 1을 곱하여 하류를 거친다. 결국 덧셈 노드의 역전 파는 1을 곱하기만 할 뿐이므로 입력된 값을 그대..
이번 글에서는 경사 법에 대해 알아보겠다. 머신러닝 문제 대부분은 학습 단계에서 최적의 매개변수를 찾아낸다. 딥러닝 즉, 신경망 역시 최적의 매개변수를 학습 시에 찾아야 한다. 여기서 최적이란 손실 함수가 최솟값이 될 때의 매개변수 값이다. 경사 법이란 기울기를 이용해 함수의 최솟값을 찾으려는 것이다. 경사 법을 수식으로 나타내 보겠다. 그림 1이 바로 경사 법을 수식으로 나타낸 것이다. 수식에서 η ( 에타 )는 갱신하는 양을 나타낸다. 이를 신경망 학습에서는 학습률이라 한다. 학습률이란 한 번의 학습으로 얼마만큼 학습해야 할지, 즉 매개변수 값을 얼마나 경신하냐를 결정하는 것이다. 이제 경사 법을 파이썬으로 구현해보겠다. 경사 법 코드 def gradient_descent ( f, init_x, lr..
이번 글에서는 앞 글에서 봤던 편미분을 묶어서 동시에 계산하는 방법을 알아보겠다. 이 묶어서 계산하는 방법이 바로 기울기라는 것이다. 지금부터 기울기에 대해 알아보겠다. 그림 1처럼 모든 변수의 편미분을 벡터로 정리한 것을 기울기라고 한다. 이 기울기를 파이썬으로 구현해보겠다. 기울기 코드 import numpy as num def numerical_gradient ( f, x ) : h = 1e-4 grad = num.zeros_like ( x ) for idx in range ( x.size ): tmp_val = x [ idx ] x [ idx ] = tmp_val + h fxh1 = f ( x ) x [ idx ] = tmp_val - h fxh2 = f ( x ) grad [ idx ] = ( ..
3층 신경망 구성 입력층 ( 0층 ) -> 첫 번째 은닉층 ( 1층 ) 3개 -> 두 번째 은닉층 ( 2층 ) 2개 -> 출력층 ( 3층 ) 2개 그림 1에서 x1,x2는 입력층이고, y1,y2 는 출력층이다 중간에 아무것도 안 적힌 상자들은 은닉층 들이다. 그림 2는 입력층의 뉴런 x2에서 다음 층의 뉴런으로 향하는 선 위에 가중치를 표시하고 있다. 그림 2의 과정을 표기한 밑의 그림 3을 본다. 그림 3에서 w오른쪽 위에는 ( 1 )이 붙어있는데 이것은 1층의 가중치를 뜻하는 것이다. w의 오른쪽 밑 첫 번째 숫자인 1은 다음 층의 1번째 뉴런을 뜻하고, w의 오른쪽 밑 두 번째 숫자인 2는 앞 층의 2번째 뉴런을 뜻한다. 해석을 해보면 앞 층의 2번째 뉴런 ( x2 ) 에서 다음 층의 1번째 뉴런 ..
시그모이드 함수 그림 1은 시그모이드 함수를 수식으로 나타낸 것이다. exp(-x)에서 e는 자연상 수로 2.7182... 의 값을 갖는 실수다. 시그모이드 함수 구현하기 시그모이드 함수 식 구현하기 import numpy as num def sigmoid(x): return 1 / ( 1 + num.exp ( -x ) ) 시그모이드 함수 그래프로 구현하기 import numpy as num import matplotlib.pyplot as plt def sigmoid(x): return 1 / ( 1 + num.exp ( -x ) ) x = num.arange ( -5.0, 5.0, 0.1 ) y = sigmoid ( x) plt.plot ( x, y ) plt.ylim ( -0.1, 1.1 ) plt..