[밑바닥부터 시작하는 딥러닝] 5장, 6장
오차역전파법
계산 그래프(computational graph) : 계산 과정을 그래프(노드,에지)로 나타낸 것.
계산을 그래프 왼쪽에서 오른쪽으로 진행하면, 순전파(Forward propagation) 그 반대를 역전파(backward propagation).
국소적 계산 : 각 노드간의 계산은 자신과 관련된 정보만으로 결과를 출력한다.
계산 그래프를 사용하는 이유 : 역전파를 통해서 변수의 변화에 따라 최종 결과가 어떻게 변하는지 알 수 있고, 중간 미분 결과를 공유가능하고, 다수의 미분을 효율적으로 할 수 있다.
연쇄법칙(chain rule) : 합성함수의 미분은 합성함수를 구성하는 각 미분의 곱으로 표현 가능한 성질과 동일하다.
ex) x + y = t , t**2 = z 라고할때, dz/dx = dz/dt * dt/dx = 2t * 1 = 2(x + y) 으로 해석가능하다.
신경망 학습의 전체 과정 :
1. 미니배치 : 훈련 데이터중 일부를 무작위로 선별. 이 선별 데이터의 손실을 줄이는 것이 목표이다.
2. 기울기 산출 : 각 가중치 매개변수의 기울기를 구함. 기울기는 손실함수의 값을 가장 작게 하는 방식으로 구해짐
3. 매개변수 갱신 : 기울기의 방향으로 아주 조금 갱신
4. 반복 : 1~3 단계를 반복한다.
순전파 : 통상적인 계산을 수행
역전파 : 각 노드의 미분을 구할 수 있다.
매개변수 갱신 / 최적화
확률적 경사 하강법(SGD) : W <- W - lr(dL/dW)
단점 : 비등방성 함수(방향에 따라 성질, 기울기가 달라지는 함수)의 경우, 탐색 경로가 비효율적이다.
f(x,y) = 1/20 x**2 + y ** 2 인경우, y의 기울기는 가파르지만, x 의 기울기는 완만해서 최소값까지 가는데 지그제그로 이동하게 됨.
모멘텀(Momentum) : v <- alpa * v - lr(dL/dW) , W <- W + v
단점 해결 방식 : 가중치 alph를 곱해주는 것은, x의 힘은 작지만 방향이 변하지 않아 일정하게 가속되고, y의 힘은 방향이 계속 바뀌어 그 힘이 상충되어 더 빠르게 최소값으로 다가간다.
AdaGrad : 학습률 감소(learning rate decay)
'모든' 매개변수의 학습률 값을 일괄적으로 낮추는 것 -> '각각' 매개변수에 맞춤형 값을 만들어주는 것.
h <- h + dL/dW * dL/dW (기울기의 제곱) , W <- W - lr * 1/sqrt(h) * dL/dW
learning rate 값을 조정할 때, 1/sqrt(h) 값을 이용해서, 많이 움직인 매개변수는 lr을 줄여준다.
단점 : 과거의 기울기를 제곱하여 계속 더함으로, 1/sqrt(h) 값이 매우작아져 lr의 갱신량이 0 이될 수 있다.
따라서 RMSProp의 방법으로 과거의 기울기는 서서히 잊고 새로운 기울기를 크게 반영하는 지수이동평균(Exponential Moving Average,EMA)의 방법이 있다.
Adam : 모멘텀, AdaGrad를 융합한 기법. 하이퍼파라미터의 '편향 보정'이 진행됨.
가중치 초깃값 : 동일한 값으로 초기화할경우, 가중치가 고르게 되어버리거나, 기울기 값이 점점 사라진다.(시그모이드 함수의 경우, 0 또는 1에 가까워질수록, 기울기가 0 이되기때문) 기울기 소실(gradient vanishing)
Xavier 초기값 : 앞 계층의 노드개수에 맞춰, 표준 편차가 1/sqrt(n) 인 분포를 사용한다.
ReLU의 가중치 초기값 :: He초기값 : sqrt(2/n) 의 값을 사용함. 음수가 0 이므로, 더 넓게 분포시키기 위해 2배의 계수가 필요하다고 해석.
배치 정규화
활성화 값 분포를 적당히 퍼지도록 '강제'하는 방법.
-학습속도 개선, -초깃값 의존도 개선, -오버피팅 억제
- affine - Batch Norm - ReLU - 의 계층
데이터의 분표를 평균 = 0, 분산 = 1 이되도록 정규화.
계층마다 정규화된 데이터를 확대 , 이동을 수행한다. 확대 = 1, 이동 = 0 으로 초기화한후, 적합한 값으로 조정한다.
오버피팅
범용성능을 잃어버린 모델.
원인 : 매개변수가 많고, 표현력이 높은 모델 | 훈련 데이터가 적을경우
해결 : 가중치 감소(weight decay)
가중치 감소 : 큰 가중치 매개변수에 대해서 큰 페널티를 부과하여 오버피팅을 억제하는 방법 , 가중치 매개변수의 값이 커서 오버피팅이 발생하는 경우가 많음.
방법 : 손실함수의 값에 L2 norm을 더해서, 가중치의 피팅능력을 다운시킴. 손실함수의 값을 줄이는 것이기 때문에, 가중치의 제곱 합이 크다면, 그만큼 1/2 * lamda * W**2를 손실함수에 더해서, 패널티를 부여함.
L1 norm : 각 가중치의 절대값의 합
L2 norm : 각 가중치의 제곱의 합의 제곱근.
L INF norm : 가중치중 절대값이 가장 큰 값.
드롭 아웃(dropout)
가중치 감소만으로 대응이 어려운 복잡한 신경망 모델에서, 뉴런을 임의로 삭제하면서 학습하는 방법.
은닉층의 뉴런을 무작위로 골라 삭제. 훈련때는 데이터를 흘릴 때마다 삭제할 뉴런을 무작위로 선택하고, 시험때는 모든 뉴런에 신호를 전달함. 단, 각 뉴런의 출력에 훈련 때 삭제 안한 비율을 곱하여 출력한다.
하이퍼 파라미터의 적절성
검증 데이터(vaildation data) : 하이퍼 파라미터의 적절성을 조정하기 위한 데이터.
* 훈련데이터 : 매개변수 학습 | 검증 데이터 : 하이퍼 파라미터 성능 평가 | 시험 데이터 : 신경망의 범용 성능 평가
하이퍼 파라미터 최적화 : 최저 값이 존재하는 범위를 조금 씩 줄여나가는 방식.
0단계 : 하이퍼 파라미터 값의 범위를 정함
1단계 : 설정된 범위에서 하이퍼파라미터의 값을 무작위로 추출
2단계 : 1단계의 하이퍼파라미터 값을 이요하여 학습, 검증 데이터로 정확도를 평가(단, 에폭은 작게 설정한다.)
3단계 : 1단계와 2단계를 특정 횟수 반복하여, 그 정확도의 결과를 보고 범위를 좁힘.
결론 : 어느정도 범위가 좁아지면 그 범위에서 값 하나를 골라냄.
효율적 최적화 : 베이즈 최적화(Bayesian optimization)
ex) 10**-8 <= weight_decay <= 10**-4(가중치 감소 계수) , 10**-6 <= learning rate <= 10*-2(학습률) 초기값 지정