SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
밑바닥부터 시작하는 딥러닝 [CHAP6. 학습관련기술들]
[PAGE 3]
최적화란 신경망에서 손실함수의 값을 가능한 한 낮추는 매개변수를 찾는 것, 즉
오차를 최소화하는 최적의 가중치를 찾는 것을 말한다.
가중치 매개변수를 갱신하는 방식의 최적화 방법으로 확률적 경사 하강법, 모멘텀,
AdaGrad, Adam 이렇게 네 가지가 있다.
[PAGE 5]
신경망의 학습은 훈련데이터로부터 계산되는 손실함수를 최소화하는 과정이다.
임의의 출발점을 두고 가중치를 갱신하는 반복 계산을 통해 최저값을 구하는 가장
간단한 방법이 경사하강법이다.
일반적으로 신경망은 매우 복잡하기때문에 전역최소점 (global minimum)을 직접
계산하여 구하는 것은 통상적으로 불가능하다.
대신 현재 위치에서 음의 기울기 방향으로, 즉 더 낮은 곳으로 이동하는 것을
반복하는 방식으로 지역최소점(local minimum)은 구할 수 있다.
전역 최소점이 아니더라도 지역 최소점의 값이 충분히 작다면, 나름대로 좋은
결과를 얻을 수 있다.
경사 하강법은 모든 훈련 데이터에 대하여 계산되는 손실함수를 최적화한다. 즉
최소화하려는 목적함수가 항상 같기 때문에 한번 지역최소점에 갇히면 다시
빠져나올 수 없다. 지역최소점이 충분히 작지 않다면(오차가 크게 줄어들지
않는다면), 이는 큰 단점이 된다.
[PAGE 6]
확률적 경사 하강법은 훈련 데이터 전부가 아니라, 미니배치를 통해
무작위로 선정한 일부 데이터만 사용하는 방법이다. 데이터의 규모가 작아
계산속도가 훨씬 빠르므로 같은 시간동안 더 많이 학습할 수 있고, 여러 번
반복할 경우 전체 데이터를 사용한 batch학습의 결과와 유사하게 수렴한다.
확률적 경사 하강법은 미니배치의 손실 함수 값을 줄이는 것을 목표로 한다.
가중치를 갱신할 때마다 샘플이 달라지기 때문에 목적함수도 달라진다.
따라서 앞에서의 충분히 작지 않은 지역최소점에 갇힐 위험이 상대적으로
적다.
[PAGE 7]
그러나 기울기에 의존하는 SGD 기법은 분명한 한계가 존재한다.
미니배치를 이용하여도 결국 지역최소점에 갇히는 가능성은 배제할 수 없다.
위 첫번째, 두번째는 지역최소점에 갇혀 빠져나오지 못하거나, 빠져나오는데 상당한
시간이 걸리는 모습을 보여준다.
세번째는 경사하강법을 응용한 다른 최적화 기법들보다 성능이 현저하게 떨어짐을
보여준다.
[PAGE 10]
모멘텀은 물리학에서 운동량을 뜻한다. 이 방법은 최적화 문제를 물리학적
관점에서 바라보는데 유래했다.
모멘텀은 경사하강법의 변형으로 기존의 경사하강법에 가속도의 개념을
더한 것이다.
손실함수를 구릉지대에서의 높이라고 보았을 때, 파라미터의 초기값을
임의로 정하는 것은 공을 어떤 위치에 0의 속도로 세팅하는 것과 같다. 이
상황에서 최적화 과정은 공을 ‘굴리는’ 과정과 동일하다.
[PAGE 11]
V(속도)는초기값이 0인 상태에서 시작하여 반복 계산하면서 현재의
기울기(그래디언트)가 다음 모멘트 V에 지속적으로 누적된다. 현재 기울기는
물리에서의 물체에 가해지는 힘(F)으로 이해하면 쉽다.
 는 모멘텀 또는 운동량이라고 부르며, 마찰계수로 이해할 수 있다.
  항은 물체가 아무런 힘을 받지 않을 때, 즉 기울기가 0일때 물체의
속도를 점점 감소시키는 역할을 한다. 만약  가 없다면 공은 언덕
아래쪽에서 절대 멈추지 못할 것이다.
오른쪽 그림은 모멘텀 방식을 설명한다.
현재 위치 w 이전까지 누적된 기울기가   이다.
현재 위치에서 기울기와 속도를 더해 구해진 v’가 현재 위치와 더해지면
w’가 된다.
즉 과거의 이동 방향을 계속 누적해 기억하면서 전체적인 방향의 경향성을
파악하고 지속하는 방식이다.
http://aikorea.org/cs231n/neural-networks-3/#sgd
[PAGE 12]
모멘텀은 과거의 그래디언트가 지향하는 방향을 현재 그래디언트에
보정하려는 방식이다.
일종의 관성 또는 가속도처럼 생각하면 된다.
(모멘텀의 핵심은 방향과 속력이다. 기울기는 어떤 물체에 가해지는
힘(F)으로 간주할 수 있다. 기울기가 누적되면서 이동 방향이 보정됨과
동시에 속력 또한 증가한다.)
[PAGE 13]
모멘텀은 상대적으로 SGD보다 움직임의 효율이 좋다.
[PAGE 14]
또 모멘텀 방식을 이용할 경우 위 그림과 같이 지역최소점을 빠져나오는
효과를 기대할 수 있다. SGD는 지역최소점(local minima)에 빠지면 기울기가
0이 되어 이동할 수 없지만 모멘텀 방식의 경우 이동하던 방향에 관성이
있어 지역최소점을 빠져나오고 더 좋은 최소점으로 이동할 것을 기대할 수
있게 된다. 하지만 모멘텀 방식은 과거의 이동 기록을 저장해야 하기 때문에
메모리가 두 배로 필요하게 된다.
[PAGE 15]
모멘텀(녹색)은 한 방향으로 힘(기울기)을 받아 운동할 때 더 빠르게
움직인다.(가속도) 또한 안장점에 빠져도 관성을 통해 빠져나올 수 있다.
[PAGE 17]
SGD와 모멘텀은 모든 매개변수(가중치)에 똑같은 학습률(learning rate)을
적용했다면, AdaGrad는 매개변수 별로 학습속도(학습률)을 다르게 적용한다.
Adagrad의 기본 아이디어는 ‘지금까지 많이 변화하지 않은 매개변수는 학습
속도를 키우고 많이 변화했던 변수들은 학습 속도를 낮춘다’이다.
수식에서 h는 기울기 제곱들의 합이다. 아래 매개변수 조정 수식에서 학습률을
조정하는 역할을 한다.
아래 수식은 h값이 클수록 학습률이 낮아짐을 의미하는데, 이는 곧 기울기가 많이
누적될수록(여러 번 갱신될수록/많이 움직일수록) 학습률이 낮아짐을 의미한다.
[PAGE 18]
AdaGrad는 무한히 계속 학습할 경우 갱신 강도가 점점 약해지다가 어느 순간
0이 되어서 전혀 갱신되지 않게 되는 데, 이 문제를 개선한 방법이 Rmsprop이다.
기존에 모든 기울기를 균일하게 더하던 방식에서 먼 과거의 기울기는 점점 잊고
새로운 기울기 정보를 더 크게 반영하는 것이다. 이를 지수이동평균(EMA)라 하며,
최신 정보에 가중치를 둠으로써 학습률이 둔화되는 속도를 늦추는 방법이다.
[PAGE 19]
AdaGrad(파란색)는 학습이 진행될수록 학습 속도가 점차 느려지는 것을 알 수
있다.또 Rmsprop(검은색)가 Adagrad(파란색)에 비해 후반부에 학습 속도가 조금
더 빠른 것을 확인할 수 있다. (세번째에서도 검은색이 파란색을 추월하는 모습을
확인할 수 있음!)
[PAGE 21]
Adam은 모멘텀과 AdaGrad 두 기법을 융합한 듯한 방법이라고 하는데, 사실
모멘텀과 RMSProp를 융합했다고 보는 것이 더 적절하다. Adam은 모멘텀처럼
기울기를 누적하는데 이때 RMSProp처럼 기울기의 지수평균, 즉 최신 기울기
정보의 영향력을 높이는 방식으로 이동 방식을 조정한다. 또 RMSProp의 갱신
방법과 거의 동일하게 기울기 제곱의 지수이동평균으로 학습률을 조정한다.
<수식>
m = beta1*m + (1-beta1)*dx
v = beta2*v + (1-beta2)*(dx**2)
x = x- learning_rate * m / (np.sqrt(v) + eps)
m은 모멘텀의 속도(v)에 해당한다. Dx는 기울기이며 beta1과 beta2는
하이퍼파라미터로 사람이 직접 입력해야하는 값이다. 대체로 0.9/0.999가
추천되고 있다. V는 AdaGrad와 RMSProp의 h에 해당한다.
기울기를 제곱하여 누적하는 방식인데, m과 v모두 지수평균을 채택하고 있다.
eps는 분모가 0이 되는것을 방지하기 위한 안전장치로 아주 작은 값이다.
X는 최종 갱신 값이다. 전체적인 수식만 보면 기울기 대신 보다 안정화된 m이
사용되었다는 점을 제외하고 RMProp와 정확히 같은 수식이다.
[PAGE 23]
책의 예제 함수  ‫﷐‬ , ‫﷐﷐=﷯‬ ‫﷐+﷯02﷮﷯2﷮‬ ‫﷯2﷮‬의 최솟값을 구하는 문제를
풀어보면서 앞의 네 가지 최적화 기법들을 실제로 구현하면서 비교해 볼 것이다.
먼저 해당 함수를 미분한  ‫﷐‬ , ‫﷐=﷯‬ ‫2+﷯01﷮‬ 함수를 df라는 이름으로
정의한다.
초기 파라미터 값을 저장할 딕셔너리 변수 params를 선언하고,
키‘x’와 ‘y’에 각각 초깃값인 -7, 2를 매칭한 쌍을 추가한다.
기울기값을 저장할 딕셔너리 변수 grads를 선언하고,
마찬가지로 각 키 값에 초깃값으로 0, 0을 매칭하여 추가한다.
최적화 함수를 저장할 딕셔너리 변수 optimizer를 선언한다. OrderDict()는 순서를
고정하는 명령이다. 본래 딕셔너리 자료형은 순서 개념이 없고 무엇이 추가
되었는지, 그 내용이 중요하다. OrderDict는 순서 개념을 주는 것이다.
각 키에 최적화함수의 이름을, 밸류(value)에 함수(학습률)을 넣어 딕셔너리에
추가한다.
[PAGE 24]
반복문을 통해 optimizers에 저장된 최적화함수 4개가 순차적으로 적용된다.
가장 먼저 SGD 함수가 호출된다.
x_history는 x파라미터(x의 가중치 매개변수)가 작은 값으로 갱신되는 이력을
저장한다.
Y도 마찬가지
파라미터 딕셔너리를 초깃값 -7,2,로 다시 초기화해주는 부분인데, 최적화함수가
하나 끝나고 다음 기법으로 넘어갈때 초깃값을 동일하게 다시 설정해주기 위한
장치이다.
다음 반복문은 최적화를 30번 반복, 즉 가중치 매개변수를 30번 갱신한다는 것을
의미한다.
x_history.append는 현재 가중치 매개변수를 기록한다. 현재 -7이므로 -7이
추가된다.
기울기는 앞의 df로 정의한 문제의 함수식에 현재 파라미터 값을 대입하여 구한다.
계산하면 -0.7, 4.0이 리턴된다.
구한 현재 파라미터(가중치)와 기울기를 가지고 본격적으로 최적화를 한다.
[PAGE 25]
미리 정의한 SGD 클래스의
update메소드로 바로 연결된다.
모든 키(‘x’ ‘y’)에 대해 밸류(value)인 파라미터가 갱신된다.
해당 코드는 화면 오른쪽 상단의 SGD의 수식을 그대로 옮겨놓은 것이다.
코드를 풀어 쓰면 첫번째와 같다. ‘x’부터 값을 구하면, -0.035로 갱신된다.
‘y’는 -1.8로 갱신된다. 이렇게 하면 한 최적화 1회(한 루프)가 끝난다.
[PAGE 26]
한 루프가 끝나면 다시 돌아와서 두번째 루프를 시작한다. 아까처럼
파라미터 이력을 기록한다. 이 과정을 총 30번 수행한다.
[PAGE 27]
np.zeros_like 자세한 내용: http://rfriend.tistory.com/tag/np.zeros_like%28%29
np.zeros_like 함수는 이미 있는 array와 동일한 모양과 데이터 형태를
유지한 상태에서 각 각 '0’을 반환합니다.
[PAGE 28]
Adagrad는 매개변수별로 학습률을 다르게 적용하는 최적화 방식이다. 많이
변화한 매개변수일수록 최소치에 가까워져있을 확률이 높기 때문에
학습률을 낮게 조정해서 학습속도를 늦춰 보다 세밀하게 가중치 매개변수를
조정한다.
최적화 과정을 목적지점까지 눈 밭을 걸어가는 것이라고 생각하면 h는 눈
위에 찍힌 발자국이라고 생각하면 쉽다. 목적지점이 어딘지 정확히 모르는
상태에서 발자국이 많이 찍히면 목적지점 인근에 있을 확률이 높으므로
그만큼 보폭을 좁게 해서 천천히 걷고, 발자국이 적게 찍혀있다면 보폭을
크게해서 빠르게 걸어서 목적지점까지 좀더 빠르게 접근하도록 조절하는
것으로 이해할 수 있다.
Adagrad에서 h는 기울기의 누적 값으로 학습 진행상황을 알 수 있게
해주는 변수이다. 앞의 ‘발자국’에 해당한다.
[PAGE 29]
Adam은 하이퍼 파라미터가 베타1, 2, 학습률까지 총 3개이다.
[PAGE 30]
어느 갱신 방법을 이용하는가에 대해서는 정해진 답은 없다. 주어진 문제에 따라
다르고, 학습률과 같은 하이퍼파라미터를 어떻게 설정하는가에 따라서도 결과가
달라지기 때문이다.
비록 SGD가 비효율적인 것 같지만, 지금도 많은 연구에서 SGD를 사용하고 있다.
최근에는 Adam을 많이 사용하는 추세이다.
[PAGE 31]
용어 정리 : http://crmn.tistory.com/8
batch_size: 한 번에 처리하는 사진의 장 수
max_iterations: 훈련 과정에서 몇 번 반복할 것인가
epoch: 훈련데이터 사진 전체를 딱 한 번씩 사용 했을 때를 한
세대(epoch)가 지나갔다고 말함
[PAGE 32]
학습 진도는 SGD가 가장 느리고 나머지 세 기법은 비슷하나 AdaGrad가 가장
빠르다.
주의할 점은 하이퍼파라미터인 학습률과 신경망의 구조에 따라 결과가 달라질 수
있다는 점이다.
다만 일반적으로 SGD보다 다른 세 기법이 빠르게 학습하고 때로는 정확도도 더
높게 나타난다.
[PAGE 36]
그렇다면 가중치 초깃값을 어떻게 설정하는 것이 좋은가를 알아보기 위해 가중치
초깃값에 따라 은닉층 활성화 함수가 어떻게 변화하는 지를 실험을 통해
확인해본다.
층마다 100개의 뉴런을 가지고있는 5층 신경망에 1000개의 정규분포를 이루는
무작위 데이터를 입력하며 활성화 함수로는 시그모이드함수를 사용하는 실험이다.
실험의 목적은 가중치 분포의 표준편차를 바꿔가며 활성화값들의 분포가 어떻게
변화하는지 관찰하는 것이다
가중치를 표준 편차가 1인 정규분포로 초기화할 경우 활성화함수는 0과 1에
치우친 분포를 보이게 된다. 시그모이드 함수는 출력이 0 또는 1에 가까워질수록
그 미분은 0에 다가간다. 따라서 데이터가 0과 1에 치우쳐 분포하면 역전파
기울기 값이 점점 작아지다가 사라지는 기울기 소실 문제가 발생한다.
[PAGE 37]
이번에는 가중치 표준편차가 0.01일 때 이다. 이번에는 0.5 부근에 집중된 것을
볼 수 있다. 기울기 소실 문제는 일어나지 않지만, 다수의 뉴런이 거의 같은 값을
출력하고 있으니 뉴런을 여러 개 둔 의미가 없어진다. 그래서 활성화값들이
치우치면 표현력을 제한한다는 관점에서 문제가 된다.
앞의 두 가지 경우 모두 치우친 데이터에 의해 문제가 발생하여 학습이 잘
이뤄지지 않는 경우이다. 다음으로 활성화 값을 고르게 분포시키기 위한 가중치
초깃값을 설정하는 두 가지 방법에 대해 소개한다.
[PAGE 38]
첫번째는 Xavier 초깃값이다. 일반적인 딥러닝 프레임워크들에서 표준적으로
이용되고 있는 초깃값이다. Xavier초깃값은 앞 계층의 노드가 n개라면 표준편차가
1/‫﷮﷐‬ ‫﷯‬ 이 되도록 초깃값을 설정한다. Xavier초깃값을 사용한 결과는 앞서 본
방식들보다 확실히 넓게 분포됨을 확인할 수 있다. 각 층에 흐르는 데이터가
적당히 퍼져있기 때문에 학습이 시그모이드 함수의 표현력에도 제한을 받지 않고
학습이 효율적으로 이뤄질 것으로 기대된다.
[PAGE 40]
히초깃값은 ReLU함수에 맞게 자비에 초깃값을 변형한 것이다. Xavier 초깃값은
활성화 함수가 선형인 것을 전제로 하는데 Sigmoid와 tanh함수는 좌우대칭이라
중앙 부근이 선형인 함수이므로 자비에 초깃값이 적당하다. 반면 ReLU는 음의
영역이 0이라 더 넓게 분포시키기 위해 2배의 계수가 필요하다. 따라서 자비에
초깃값의 표준편차에 2를 곱하여 더 넓은 정규 분포를 만들어 준다.
[PAGE 41]
그렇다면 활성화함수로 ReLU를 사용한 경우 다른 초깃값과 어떻게 다른지
확인해보자.
표준편차가 0.01일 떄 각 층의 활성화 값들은 아주 작은 값들이다. 신경망에 작은
데이터가 흐른다는 것은 역전파때 가중치 기울기 역시 작아진다는 뜻이다.
실제로도 학습이 거의 이루어지지 않을 것이다.
자비에 초깃값은 층이 깊어지면서 치우침이 커진다. 이는 학습할 때 기울기 소실
문제를 일으킨다
He초깃값은 모든 층에서 균일하게 분포되어있다. 층이 깊어져도 분포가
균일하므로 역전파때도 적절한 값이 나올 것으로 기대할 수 있다.
[PAGE 43]
앞선 세 가지 경우를 실제 데이터인 MNIST데이터셋으로 실험을 해보았다.
층별로 뉴런 수가 100개인 5층 신경망으로, 활성화함수로는 ReLU함수를
사용했다.
그래프에서 보이듯 표준편차가 0.01일때는 학습이 전혀 이루어지지 않는다. 앞의
활성화 분포에서 본 것처럼 순전파때 0에 가까운 너무 작은 값이 흐르기
때문이다. 그로인해 역전파 때 기울기도 작아져 거의 갱신되지 않는 것이다.
반대로 자비에와 히 초깃값의 경우 학습이 순조롭게 이루어지고 있다. 다만 학습
진도는 히 초깃값 쪽이 더 빠르다.
결론적으로 활성화함수로 ReLU를 사용할때는 He초깃값을, 시그모이드 같은
S자모양 곡선 일 때는 자비에 초깃값을 쓰는 것이 적절하다.
학습에서 가중치 초깃값은 이처럼 학습의 성패를 가르는 경우가 많기 때문에
적절한 초깃값 설정은 매우 중요하다.
[PAGE 45]
앞 절을 통해 적절한 가중치 초깃값을 설정함으로써 활성화값 분포를 적당히
퍼지게 할 수 있고 정당히 퍼진 활성화값 분포는 원활한 학습을 수행하게
해준다는 점을 확인했다.
배치정규화 기법은 활성화값 분포가 적당히 퍼지도록 강제하는 기법으로 신경망을
적절한 값으로 초기화하여 그동안 많은 연구자들을 괴롭혀왔던 초기화 문제의
상당부분을 해소해 주었다.
배치정규화는 2015년에 제안된 것으로 역사가 깊지 않음에도 이미 신경망
학습에서 일반적으로 사용되는 기법중 하나이며 이제는 거의 필수가 되어가고
있다.
배치정규화가 이렇게 주목 받는 이유는 학습을 더 빨리 진행할 수 있으며 초깃값
설정에 크게 신경 쓸 필요가 없고 오버피팅 억제 효과가 있다는 강점들 덕분이다.
- http://aikorea.org/cs231n/neural-networks-2-kr/#batchnorm
-
https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%
A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/
[PAGE 46]
배치정규화는 미니배치 단위로 데이터 분포가 평균이 0, 분산이 1이 되도록
정규화한다.
첫번째는 미니배치들의 평균을 구하는 수식, 두번째는 분산을 구하는 수식이고
세번째는 미니배치 앞서 구해진 평균과 분산을 이용해 각각 정규화하는 수식이다.
세번째 수식 분모에 있는 엡실론은 0으로 나누게 되는 상황을 예방하기 위해
더해주는 아주 작은 값이다. 여기까지의 수식은 단순히 미니배치 입력데이터를
정규화된 값으로 변환하는 일을 한다
마지막은 정규화된 데이터에 고유한 확대와 이동 변환을 수행한다. 감마는 확대를,
베타는 이동을 담당한다. 두 값은 1과 0으로 시작하고 학습하면서 적합한 값으로
조정해간다.
(감마=1이라는 것은 1배 확대를 의미하고 베타=0이라는 것은 이동하지 않음을
뜻한다. 즉, 처음에는 원본 그대로에서 시작한다는 의미이다.)
[PAGE 47]
Affine(어파인)계층=행렬의 내적
배치정규화 처리는 활성화 함수의 앞(혹은 뒤)에 삽입하여 데이터 분포를 고르게
할 수 있다.
이처럼 배치정규화를 네트워크에 적용시킬때는, 특정 은닉층에 들어가기 전에
배치정규화층을 더해주어 입력데이터를 수정해준 뒤 수정된 값을 활성화 함수로
넣어주는 방식으로 사용한다.
https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%
A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/
[PAGE 49]
MNIST 데이터셋에 배치정규화 계층을 사용할 때와 사용하지 않을 때의 학습
진도를 비교해보면, 확실히 배치정규화가 학습을 빨리 진전시키고 있다는 것을
확인할 수 있다.
[PAGE 50]
가중치 초깃값의 표준편차를 다양하게 바꿔가면서 학습 경과를 관찰해보면, 거의
모든 경우에서 배치정규화를 사용할 때 학습 진도가 빠른 것으로 나타난다. 실제로
배치정규화를 이용하지 않는 경우에는 초깃값이 잘 분포되어있지 않으면 학습이
전혀 진행되지 않는 모습도 확인할 수 있다.
이렇듯, 배치정규화를 이용하면 학습이 빨라지고, 가중치 초깃값에 크게 의존하지
않아도 된다는 강력한 장점들에 의해 앞으로 더 다양한 분야에서 활약할 것으로
기대된다.
[PAGE 56]
http://aikorea.org/cs231n/neural-networks-2-kr/#reg
오버피팅 억제용으로 예전부터 많이 이용된 방법 중 가중치 감소 라는 것이 있다.
이는 학습 과정에서 큰 가중치에 대해 그만큼 큰 패널티를 부과하여 오버피팅을
억제하는 방법이다. 이러한 방식을 취하는 이유는 원래 오버피팅이 가중치
매개변수의 값이 커서 발생하는 경우가 많기 때문이다.
가중치 감소 기법 중 가장 일반적으로 사용되는 것이 L2정규화(L2
regularization)이다. 모든 가중치 매개변수의 제곱만큼의 크기를 손실함수에
더하여 제약을 거는 방식으로 구현된다. 두번째 수식이 이에 해당된다.
식에서 람다는 정규화 강도를 의미한다. ½은 정규화 값을 w로 미분했을 때
  의 값을 갖도록 하기 위함이다.
[PAGE 57]
훈련데이터에 대한 정확도와 시험 데이터에 대한 정확도에는 여전히 차이가
있지만, 가중치 감소를 이용하지 않았을 때(그림 6-20)와 비교하면 그 차이가
줄었다. 즉, 오버피팅이 억제되었다. (훈련데이터에 대한 정확도가 100%에
도달하지는 않았다는 점도 주목할만 하다.) 가중치 감소는 간단하게 구현할 수
있으며 어느 정도 지나친 학습을 억제할 수 있다. 그러나 신경망 모델이
복잡해지면 가중치 감소만으로는 대응하기 어렵다. 이럴 때 다음에서 다룰
‘드롭아웃’ 기법을 이용한다.
(해당 스크립트는 링크된 사이트와 서적 내용을 기반으로 직접 기술하였습니다.)
© Software campus COMMUNITY 2017
https://www.facebook.com/groups/softwarecamp

Mais conteúdo relacionado

Mais procurados

내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)SANG WON PARK
 
Reinforcement learning v0.5
Reinforcement learning v0.5Reinforcement learning v0.5
Reinforcement learning v0.5SANG WON PARK
 
4.convolutional neural networks
4.convolutional neural networks4.convolutional neural networks
4.convolutional neural networksHaesun Park
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류Haesun Park
 
3.unsupervised learing
3.unsupervised learing3.unsupervised learing
3.unsupervised learingHaesun Park
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리Haesun Park
 
Boosting_suman
Boosting_sumanBoosting_suman
Boosting_sumansuman_lim
 
2.supervised learning
2.supervised learning2.supervised learning
2.supervised learningHaesun Park
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신Haesun Park
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지Haesun Park
 
서포트 벡터머신
서포트 벡터머신서포트 벡터머신
서포트 벡터머신Sunggon Song
 
3.unsupervised learing(epoch#2)
3.unsupervised learing(epoch#2)3.unsupervised learing(epoch#2)
3.unsupervised learing(epoch#2)Haesun Park
 
제어-물리적시스템의 수학적모델링
제어-물리적시스템의 수학적모델링제어-물리적시스템의 수학적모델링
제어-물리적시스템의 수학적모델링jdo
 
사이킷런 최신 변경 사항 스터디
사이킷런 최신 변경 사항 스터디사이킷런 최신 변경 사항 스터디
사이킷런 최신 변경 사항 스터디Haesun Park
 
4.representing data and engineering features(epoch#2)
4.representing data and engineering features(epoch#2)4.representing data and engineering features(epoch#2)
4.representing data and engineering features(epoch#2)Haesun Park
 
Machine learning boosting 20180424
Machine learning boosting 20180424Machine learning boosting 20180424
Machine learning boosting 20180424Changwook Jun
 
Introduction to SAC(Soft Actor-Critic)
Introduction to SAC(Soft Actor-Critic)Introduction to SAC(Soft Actor-Critic)
Introduction to SAC(Soft Actor-Critic)Suhyun Cho
 
Soft Actor-Critic Algorithms and Applications 한국어 리뷰
Soft Actor-Critic Algorithms and Applications 한국어 리뷰Soft Actor-Critic Algorithms and Applications 한국어 리뷰
Soft Actor-Critic Algorithms and Applications 한국어 리뷰태영 정
 

Mais procurados (20)

내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)내가 이해하는 SVM(왜, 어떻게를 중심으로)
내가 이해하는 SVM(왜, 어떻게를 중심으로)
 
Reinforcement learning v0.5
Reinforcement learning v0.5Reinforcement learning v0.5
Reinforcement learning v0.5
 
4.convolutional neural networks
4.convolutional neural networks4.convolutional neural networks
4.convolutional neural networks
 
DL from scratch(6)
DL from scratch(6)DL from scratch(6)
DL from scratch(6)
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 3장. 분류
 
3.unsupervised learing
3.unsupervised learing3.unsupervised learing
3.unsupervised learing
 
DL from scratch(4~5)
DL from scratch(4~5)DL from scratch(4~5)
DL from scratch(4~5)
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 6장 결정 트리
 
Boosting_suman
Boosting_sumanBoosting_suman
Boosting_suman
 
2.supervised learning
2.supervised learning2.supervised learning
2.supervised learning
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 5장. 서포트 벡터 머신
 
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
[홍대 머신러닝 스터디 - 핸즈온 머신러닝] 2장. 머신러닝 프로젝트 처음부터 끝까지
 
서포트 벡터머신
서포트 벡터머신서포트 벡터머신
서포트 벡터머신
 
3.unsupervised learing(epoch#2)
3.unsupervised learing(epoch#2)3.unsupervised learing(epoch#2)
3.unsupervised learing(epoch#2)
 
제어-물리적시스템의 수학적모델링
제어-물리적시스템의 수학적모델링제어-물리적시스템의 수학적모델링
제어-물리적시스템의 수학적모델링
 
사이킷런 최신 변경 사항 스터디
사이킷런 최신 변경 사항 스터디사이킷런 최신 변경 사항 스터디
사이킷런 최신 변경 사항 스터디
 
4.representing data and engineering features(epoch#2)
4.representing data and engineering features(epoch#2)4.representing data and engineering features(epoch#2)
4.representing data and engineering features(epoch#2)
 
Machine learning boosting 20180424
Machine learning boosting 20180424Machine learning boosting 20180424
Machine learning boosting 20180424
 
Introduction to SAC(Soft Actor-Critic)
Introduction to SAC(Soft Actor-Critic)Introduction to SAC(Soft Actor-Critic)
Introduction to SAC(Soft Actor-Critic)
 
Soft Actor-Critic Algorithms and Applications 한국어 리뷰
Soft Actor-Critic Algorithms and Applications 한국어 리뷰Soft Actor-Critic Algorithms and Applications 한국어 리뷰
Soft Actor-Critic Algorithms and Applications 한국어 리뷰
 

Semelhante a 밑바닥부터 시작하는 딥러닝 - 학습관련기술들 스크립트

Deep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learningDeep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learningJinSooKim80
 
2.supervised learning(epoch#2)-2
2.supervised learning(epoch#2)-22.supervised learning(epoch#2)-2
2.supervised learning(epoch#2)-2Haesun Park
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsKyeongUkJang
 
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리jdo
 
The fastalgorithmfordeepbeliefnets
The fastalgorithmfordeepbeliefnetsThe fastalgorithmfordeepbeliefnets
The fastalgorithmfordeepbeliefnetsLee Gyeong Hoon
 
Control as Inference.pptx
Control as Inference.pptxControl as Inference.pptx
Control as Inference.pptxssuserbd1647
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexityskku_npc
 
Reinforcement learning basic
Reinforcement learning basicReinforcement learning basic
Reinforcement learning basicJicheol Woo
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능도형 임
 
Understanding deep learning requires rethinking generalization (2017) 2 2(2)
Understanding deep learning requires rethinking generalization (2017)    2 2(2)Understanding deep learning requires rethinking generalization (2017)    2 2(2)
Understanding deep learning requires rethinking generalization (2017) 2 2(2)정훈 서
 
Guided policy search
Guided policy searchGuided policy search
Guided policy searchJaehyeon Park
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2jdo
 
2.supervised learning(epoch#2)-1
2.supervised learning(epoch#2)-12.supervised learning(epoch#2)-1
2.supervised learning(epoch#2)-1Haesun Park
 
00_ML 기초_기본개념
00_ML 기초_기본개념00_ML 기초_기본개념
00_ML 기초_기본개념AHRA CHO
 
Rl from scratch part4
Rl from scratch part4Rl from scratch part4
Rl from scratch part4Shinwoo Park
 
Direct Sparse Odometry (DSO) Review
Direct Sparse Odometry (DSO) ReviewDirect Sparse Odometry (DSO) Review
Direct Sparse Odometry (DSO) ReviewEdwardIm1
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2jdo
 
딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해Hee Won Park
 

Semelhante a 밑바닥부터 시작하는 딥러닝 - 학습관련기술들 스크립트 (20)

Deep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learningDeep Learning from scratch 4장 : neural network learning
Deep Learning from scratch 4장 : neural network learning
 
07. PCA
07. PCA07. PCA
07. PCA
 
2.supervised learning(epoch#2)-2
2.supervised learning(epoch#2)-22.supervised learning(epoch#2)-2
2.supervised learning(epoch#2)-2
 
Chapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep modelsChapter 8 - optimization for training deep models
Chapter 8 - optimization for training deep models
 
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 2. 데이터 전처리
 
The fastalgorithmfordeepbeliefnets
The fastalgorithmfordeepbeliefnetsThe fastalgorithmfordeepbeliefnets
The fastalgorithmfordeepbeliefnets
 
Control as Inference.pptx
Control as Inference.pptxControl as Inference.pptx
Control as Inference.pptx
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
Reinforcement learning basic
Reinforcement learning basicReinforcement learning basic
Reinforcement learning basic
 
코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능코드와 실습으로 이해하는 인공지능
코드와 실습으로 이해하는 인공지능
 
Understanding deep learning requires rethinking generalization (2017) 2 2(2)
Understanding deep learning requires rethinking generalization (2017)    2 2(2)Understanding deep learning requires rethinking generalization (2017)    2 2(2)
Understanding deep learning requires rethinking generalization (2017) 2 2(2)
 
Guided policy search
Guided policy searchGuided policy search
Guided policy search
 
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2
[컴퓨터비전과 인공지능] 7. 합성곱 신경망 2
 
2.supervised learning(epoch#2)-1
2.supervised learning(epoch#2)-12.supervised learning(epoch#2)-1
2.supervised learning(epoch#2)-1
 
00_ML 기초_기본개념
00_ML 기초_기본개념00_ML 기초_기본개념
00_ML 기초_기본개념
 
Rl from scratch part4
Rl from scratch part4Rl from scratch part4
Rl from scratch part4
 
Direct Sparse Odometry (DSO) Review
Direct Sparse Odometry (DSO) ReviewDirect Sparse Odometry (DSO) Review
Direct Sparse Odometry (DSO) Review
 
PaLM Paper Review
PaLM Paper ReviewPaLM Paper Review
PaLM Paper Review
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2
 
딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해딥러닝 기본 원리의 이해
딥러닝 기본 원리의 이해
 

밑바닥부터 시작하는 딥러닝 - 학습관련기술들 스크립트

  • 1. 밑바닥부터 시작하는 딥러닝 [CHAP6. 학습관련기술들] [PAGE 3] 최적화란 신경망에서 손실함수의 값을 가능한 한 낮추는 매개변수를 찾는 것, 즉 오차를 최소화하는 최적의 가중치를 찾는 것을 말한다. 가중치 매개변수를 갱신하는 방식의 최적화 방법으로 확률적 경사 하강법, 모멘텀, AdaGrad, Adam 이렇게 네 가지가 있다. [PAGE 5] 신경망의 학습은 훈련데이터로부터 계산되는 손실함수를 최소화하는 과정이다. 임의의 출발점을 두고 가중치를 갱신하는 반복 계산을 통해 최저값을 구하는 가장 간단한 방법이 경사하강법이다. 일반적으로 신경망은 매우 복잡하기때문에 전역최소점 (global minimum)을 직접 계산하여 구하는 것은 통상적으로 불가능하다. 대신 현재 위치에서 음의 기울기 방향으로, 즉 더 낮은 곳으로 이동하는 것을 반복하는 방식으로 지역최소점(local minimum)은 구할 수 있다. 전역 최소점이 아니더라도 지역 최소점의 값이 충분히 작다면, 나름대로 좋은 결과를 얻을 수 있다. 경사 하강법은 모든 훈련 데이터에 대하여 계산되는 손실함수를 최적화한다. 즉 최소화하려는 목적함수가 항상 같기 때문에 한번 지역최소점에 갇히면 다시 빠져나올 수 없다. 지역최소점이 충분히 작지 않다면(오차가 크게 줄어들지 않는다면), 이는 큰 단점이 된다. [PAGE 6] 확률적 경사 하강법은 훈련 데이터 전부가 아니라, 미니배치를 통해 무작위로 선정한 일부 데이터만 사용하는 방법이다. 데이터의 규모가 작아 계산속도가 훨씬 빠르므로 같은 시간동안 더 많이 학습할 수 있고, 여러 번 반복할 경우 전체 데이터를 사용한 batch학습의 결과와 유사하게 수렴한다. 확률적 경사 하강법은 미니배치의 손실 함수 값을 줄이는 것을 목표로 한다. 가중치를 갱신할 때마다 샘플이 달라지기 때문에 목적함수도 달라진다. 따라서 앞에서의 충분히 작지 않은 지역최소점에 갇힐 위험이 상대적으로 적다. [PAGE 7] 그러나 기울기에 의존하는 SGD 기법은 분명한 한계가 존재한다. 미니배치를 이용하여도 결국 지역최소점에 갇히는 가능성은 배제할 수 없다. 위 첫번째, 두번째는 지역최소점에 갇혀 빠져나오지 못하거나, 빠져나오는데 상당한 시간이 걸리는 모습을 보여준다.
  • 2. 세번째는 경사하강법을 응용한 다른 최적화 기법들보다 성능이 현저하게 떨어짐을 보여준다. [PAGE 10] 모멘텀은 물리학에서 운동량을 뜻한다. 이 방법은 최적화 문제를 물리학적 관점에서 바라보는데 유래했다. 모멘텀은 경사하강법의 변형으로 기존의 경사하강법에 가속도의 개념을 더한 것이다. 손실함수를 구릉지대에서의 높이라고 보았을 때, 파라미터의 초기값을 임의로 정하는 것은 공을 어떤 위치에 0의 속도로 세팅하는 것과 같다. 이 상황에서 최적화 과정은 공을 ‘굴리는’ 과정과 동일하다. [PAGE 11] V(속도)는초기값이 0인 상태에서 시작하여 반복 계산하면서 현재의 기울기(그래디언트)가 다음 모멘트 V에 지속적으로 누적된다. 현재 기울기는 물리에서의 물체에 가해지는 힘(F)으로 이해하면 쉽다.  는 모멘텀 또는 운동량이라고 부르며, 마찰계수로 이해할 수 있다.   항은 물체가 아무런 힘을 받지 않을 때, 즉 기울기가 0일때 물체의 속도를 점점 감소시키는 역할을 한다. 만약  가 없다면 공은 언덕 아래쪽에서 절대 멈추지 못할 것이다. 오른쪽 그림은 모멘텀 방식을 설명한다. 현재 위치 w 이전까지 누적된 기울기가   이다. 현재 위치에서 기울기와 속도를 더해 구해진 v’가 현재 위치와 더해지면 w’가 된다. 즉 과거의 이동 방향을 계속 누적해 기억하면서 전체적인 방향의 경향성을 파악하고 지속하는 방식이다. http://aikorea.org/cs231n/neural-networks-3/#sgd [PAGE 12] 모멘텀은 과거의 그래디언트가 지향하는 방향을 현재 그래디언트에 보정하려는 방식이다. 일종의 관성 또는 가속도처럼 생각하면 된다. (모멘텀의 핵심은 방향과 속력이다. 기울기는 어떤 물체에 가해지는 힘(F)으로 간주할 수 있다. 기울기가 누적되면서 이동 방향이 보정됨과 동시에 속력 또한 증가한다.) [PAGE 13]
  • 3. 모멘텀은 상대적으로 SGD보다 움직임의 효율이 좋다. [PAGE 14] 또 모멘텀 방식을 이용할 경우 위 그림과 같이 지역최소점을 빠져나오는 효과를 기대할 수 있다. SGD는 지역최소점(local minima)에 빠지면 기울기가 0이 되어 이동할 수 없지만 모멘텀 방식의 경우 이동하던 방향에 관성이 있어 지역최소점을 빠져나오고 더 좋은 최소점으로 이동할 것을 기대할 수 있게 된다. 하지만 모멘텀 방식은 과거의 이동 기록을 저장해야 하기 때문에 메모리가 두 배로 필요하게 된다. [PAGE 15] 모멘텀(녹색)은 한 방향으로 힘(기울기)을 받아 운동할 때 더 빠르게 움직인다.(가속도) 또한 안장점에 빠져도 관성을 통해 빠져나올 수 있다. [PAGE 17] SGD와 모멘텀은 모든 매개변수(가중치)에 똑같은 학습률(learning rate)을 적용했다면, AdaGrad는 매개변수 별로 학습속도(학습률)을 다르게 적용한다. Adagrad의 기본 아이디어는 ‘지금까지 많이 변화하지 않은 매개변수는 학습 속도를 키우고 많이 변화했던 변수들은 학습 속도를 낮춘다’이다. 수식에서 h는 기울기 제곱들의 합이다. 아래 매개변수 조정 수식에서 학습률을 조정하는 역할을 한다. 아래 수식은 h값이 클수록 학습률이 낮아짐을 의미하는데, 이는 곧 기울기가 많이 누적될수록(여러 번 갱신될수록/많이 움직일수록) 학습률이 낮아짐을 의미한다. [PAGE 18] AdaGrad는 무한히 계속 학습할 경우 갱신 강도가 점점 약해지다가 어느 순간 0이 되어서 전혀 갱신되지 않게 되는 데, 이 문제를 개선한 방법이 Rmsprop이다. 기존에 모든 기울기를 균일하게 더하던 방식에서 먼 과거의 기울기는 점점 잊고 새로운 기울기 정보를 더 크게 반영하는 것이다. 이를 지수이동평균(EMA)라 하며, 최신 정보에 가중치를 둠으로써 학습률이 둔화되는 속도를 늦추는 방법이다. [PAGE 19] AdaGrad(파란색)는 학습이 진행될수록 학습 속도가 점차 느려지는 것을 알 수 있다.또 Rmsprop(검은색)가 Adagrad(파란색)에 비해 후반부에 학습 속도가 조금 더 빠른 것을 확인할 수 있다. (세번째에서도 검은색이 파란색을 추월하는 모습을 확인할 수 있음!)
  • 4. [PAGE 21] Adam은 모멘텀과 AdaGrad 두 기법을 융합한 듯한 방법이라고 하는데, 사실 모멘텀과 RMSProp를 융합했다고 보는 것이 더 적절하다. Adam은 모멘텀처럼 기울기를 누적하는데 이때 RMSProp처럼 기울기의 지수평균, 즉 최신 기울기 정보의 영향력을 높이는 방식으로 이동 방식을 조정한다. 또 RMSProp의 갱신 방법과 거의 동일하게 기울기 제곱의 지수이동평균으로 학습률을 조정한다. <수식> m = beta1*m + (1-beta1)*dx v = beta2*v + (1-beta2)*(dx**2) x = x- learning_rate * m / (np.sqrt(v) + eps) m은 모멘텀의 속도(v)에 해당한다. Dx는 기울기이며 beta1과 beta2는 하이퍼파라미터로 사람이 직접 입력해야하는 값이다. 대체로 0.9/0.999가 추천되고 있다. V는 AdaGrad와 RMSProp의 h에 해당한다. 기울기를 제곱하여 누적하는 방식인데, m과 v모두 지수평균을 채택하고 있다. eps는 분모가 0이 되는것을 방지하기 위한 안전장치로 아주 작은 값이다. X는 최종 갱신 값이다. 전체적인 수식만 보면 기울기 대신 보다 안정화된 m이 사용되었다는 점을 제외하고 RMProp와 정확히 같은 수식이다. [PAGE 23] 책의 예제 함수  ‫﷐‬ , ‫﷐﷐=﷯‬ ‫﷐+﷯02﷮﷯2﷮‬ ‫﷯2﷮‬의 최솟값을 구하는 문제를 풀어보면서 앞의 네 가지 최적화 기법들을 실제로 구현하면서 비교해 볼 것이다. 먼저 해당 함수를 미분한  ‫﷐‬ , ‫﷐=﷯‬ ‫2+﷯01﷮‬ 함수를 df라는 이름으로 정의한다. 초기 파라미터 값을 저장할 딕셔너리 변수 params를 선언하고, 키‘x’와 ‘y’에 각각 초깃값인 -7, 2를 매칭한 쌍을 추가한다. 기울기값을 저장할 딕셔너리 변수 grads를 선언하고, 마찬가지로 각 키 값에 초깃값으로 0, 0을 매칭하여 추가한다. 최적화 함수를 저장할 딕셔너리 변수 optimizer를 선언한다. OrderDict()는 순서를 고정하는 명령이다. 본래 딕셔너리 자료형은 순서 개념이 없고 무엇이 추가 되었는지, 그 내용이 중요하다. OrderDict는 순서 개념을 주는 것이다. 각 키에 최적화함수의 이름을, 밸류(value)에 함수(학습률)을 넣어 딕셔너리에 추가한다. [PAGE 24] 반복문을 통해 optimizers에 저장된 최적화함수 4개가 순차적으로 적용된다. 가장 먼저 SGD 함수가 호출된다.
  • 5. x_history는 x파라미터(x의 가중치 매개변수)가 작은 값으로 갱신되는 이력을 저장한다. Y도 마찬가지 파라미터 딕셔너리를 초깃값 -7,2,로 다시 초기화해주는 부분인데, 최적화함수가 하나 끝나고 다음 기법으로 넘어갈때 초깃값을 동일하게 다시 설정해주기 위한 장치이다. 다음 반복문은 최적화를 30번 반복, 즉 가중치 매개변수를 30번 갱신한다는 것을 의미한다. x_history.append는 현재 가중치 매개변수를 기록한다. 현재 -7이므로 -7이 추가된다. 기울기는 앞의 df로 정의한 문제의 함수식에 현재 파라미터 값을 대입하여 구한다. 계산하면 -0.7, 4.0이 리턴된다. 구한 현재 파라미터(가중치)와 기울기를 가지고 본격적으로 최적화를 한다. [PAGE 25] 미리 정의한 SGD 클래스의 update메소드로 바로 연결된다. 모든 키(‘x’ ‘y’)에 대해 밸류(value)인 파라미터가 갱신된다. 해당 코드는 화면 오른쪽 상단의 SGD의 수식을 그대로 옮겨놓은 것이다. 코드를 풀어 쓰면 첫번째와 같다. ‘x’부터 값을 구하면, -0.035로 갱신된다. ‘y’는 -1.8로 갱신된다. 이렇게 하면 한 최적화 1회(한 루프)가 끝난다. [PAGE 26] 한 루프가 끝나면 다시 돌아와서 두번째 루프를 시작한다. 아까처럼 파라미터 이력을 기록한다. 이 과정을 총 30번 수행한다. [PAGE 27] np.zeros_like 자세한 내용: http://rfriend.tistory.com/tag/np.zeros_like%28%29 np.zeros_like 함수는 이미 있는 array와 동일한 모양과 데이터 형태를 유지한 상태에서 각 각 '0’을 반환합니다. [PAGE 28] Adagrad는 매개변수별로 학습률을 다르게 적용하는 최적화 방식이다. 많이 변화한 매개변수일수록 최소치에 가까워져있을 확률이 높기 때문에 학습률을 낮게 조정해서 학습속도를 늦춰 보다 세밀하게 가중치 매개변수를
  • 6. 조정한다. 최적화 과정을 목적지점까지 눈 밭을 걸어가는 것이라고 생각하면 h는 눈 위에 찍힌 발자국이라고 생각하면 쉽다. 목적지점이 어딘지 정확히 모르는 상태에서 발자국이 많이 찍히면 목적지점 인근에 있을 확률이 높으므로 그만큼 보폭을 좁게 해서 천천히 걷고, 발자국이 적게 찍혀있다면 보폭을 크게해서 빠르게 걸어서 목적지점까지 좀더 빠르게 접근하도록 조절하는 것으로 이해할 수 있다. Adagrad에서 h는 기울기의 누적 값으로 학습 진행상황을 알 수 있게 해주는 변수이다. 앞의 ‘발자국’에 해당한다. [PAGE 29] Adam은 하이퍼 파라미터가 베타1, 2, 학습률까지 총 3개이다. [PAGE 30] 어느 갱신 방법을 이용하는가에 대해서는 정해진 답은 없다. 주어진 문제에 따라 다르고, 학습률과 같은 하이퍼파라미터를 어떻게 설정하는가에 따라서도 결과가 달라지기 때문이다. 비록 SGD가 비효율적인 것 같지만, 지금도 많은 연구에서 SGD를 사용하고 있다. 최근에는 Adam을 많이 사용하는 추세이다. [PAGE 31] 용어 정리 : http://crmn.tistory.com/8 batch_size: 한 번에 처리하는 사진의 장 수 max_iterations: 훈련 과정에서 몇 번 반복할 것인가 epoch: 훈련데이터 사진 전체를 딱 한 번씩 사용 했을 때를 한 세대(epoch)가 지나갔다고 말함 [PAGE 32] 학습 진도는 SGD가 가장 느리고 나머지 세 기법은 비슷하나 AdaGrad가 가장 빠르다. 주의할 점은 하이퍼파라미터인 학습률과 신경망의 구조에 따라 결과가 달라질 수 있다는 점이다. 다만 일반적으로 SGD보다 다른 세 기법이 빠르게 학습하고 때로는 정확도도 더 높게 나타난다.
  • 7. [PAGE 36] 그렇다면 가중치 초깃값을 어떻게 설정하는 것이 좋은가를 알아보기 위해 가중치 초깃값에 따라 은닉층 활성화 함수가 어떻게 변화하는 지를 실험을 통해 확인해본다. 층마다 100개의 뉴런을 가지고있는 5층 신경망에 1000개의 정규분포를 이루는 무작위 데이터를 입력하며 활성화 함수로는 시그모이드함수를 사용하는 실험이다. 실험의 목적은 가중치 분포의 표준편차를 바꿔가며 활성화값들의 분포가 어떻게 변화하는지 관찰하는 것이다 가중치를 표준 편차가 1인 정규분포로 초기화할 경우 활성화함수는 0과 1에 치우친 분포를 보이게 된다. 시그모이드 함수는 출력이 0 또는 1에 가까워질수록 그 미분은 0에 다가간다. 따라서 데이터가 0과 1에 치우쳐 분포하면 역전파 기울기 값이 점점 작아지다가 사라지는 기울기 소실 문제가 발생한다. [PAGE 37] 이번에는 가중치 표준편차가 0.01일 때 이다. 이번에는 0.5 부근에 집중된 것을 볼 수 있다. 기울기 소실 문제는 일어나지 않지만, 다수의 뉴런이 거의 같은 값을 출력하고 있으니 뉴런을 여러 개 둔 의미가 없어진다. 그래서 활성화값들이 치우치면 표현력을 제한한다는 관점에서 문제가 된다. 앞의 두 가지 경우 모두 치우친 데이터에 의해 문제가 발생하여 학습이 잘 이뤄지지 않는 경우이다. 다음으로 활성화 값을 고르게 분포시키기 위한 가중치 초깃값을 설정하는 두 가지 방법에 대해 소개한다. [PAGE 38] 첫번째는 Xavier 초깃값이다. 일반적인 딥러닝 프레임워크들에서 표준적으로 이용되고 있는 초깃값이다. Xavier초깃값은 앞 계층의 노드가 n개라면 표준편차가 1/‫﷮﷐‬ ‫﷯‬ 이 되도록 초깃값을 설정한다. Xavier초깃값을 사용한 결과는 앞서 본 방식들보다 확실히 넓게 분포됨을 확인할 수 있다. 각 층에 흐르는 데이터가 적당히 퍼져있기 때문에 학습이 시그모이드 함수의 표현력에도 제한을 받지 않고 학습이 효율적으로 이뤄질 것으로 기대된다. [PAGE 40] 히초깃값은 ReLU함수에 맞게 자비에 초깃값을 변형한 것이다. Xavier 초깃값은 활성화 함수가 선형인 것을 전제로 하는데 Sigmoid와 tanh함수는 좌우대칭이라 중앙 부근이 선형인 함수이므로 자비에 초깃값이 적당하다. 반면 ReLU는 음의 영역이 0이라 더 넓게 분포시키기 위해 2배의 계수가 필요하다. 따라서 자비에 초깃값의 표준편차에 2를 곱하여 더 넓은 정규 분포를 만들어 준다.
  • 8. [PAGE 41] 그렇다면 활성화함수로 ReLU를 사용한 경우 다른 초깃값과 어떻게 다른지 확인해보자. 표준편차가 0.01일 떄 각 층의 활성화 값들은 아주 작은 값들이다. 신경망에 작은 데이터가 흐른다는 것은 역전파때 가중치 기울기 역시 작아진다는 뜻이다. 실제로도 학습이 거의 이루어지지 않을 것이다. 자비에 초깃값은 층이 깊어지면서 치우침이 커진다. 이는 학습할 때 기울기 소실 문제를 일으킨다 He초깃값은 모든 층에서 균일하게 분포되어있다. 층이 깊어져도 분포가 균일하므로 역전파때도 적절한 값이 나올 것으로 기대할 수 있다. [PAGE 43] 앞선 세 가지 경우를 실제 데이터인 MNIST데이터셋으로 실험을 해보았다. 층별로 뉴런 수가 100개인 5층 신경망으로, 활성화함수로는 ReLU함수를 사용했다. 그래프에서 보이듯 표준편차가 0.01일때는 학습이 전혀 이루어지지 않는다. 앞의 활성화 분포에서 본 것처럼 순전파때 0에 가까운 너무 작은 값이 흐르기 때문이다. 그로인해 역전파 때 기울기도 작아져 거의 갱신되지 않는 것이다. 반대로 자비에와 히 초깃값의 경우 학습이 순조롭게 이루어지고 있다. 다만 학습 진도는 히 초깃값 쪽이 더 빠르다. 결론적으로 활성화함수로 ReLU를 사용할때는 He초깃값을, 시그모이드 같은 S자모양 곡선 일 때는 자비에 초깃값을 쓰는 것이 적절하다. 학습에서 가중치 초깃값은 이처럼 학습의 성패를 가르는 경우가 많기 때문에 적절한 초깃값 설정은 매우 중요하다. [PAGE 45] 앞 절을 통해 적절한 가중치 초깃값을 설정함으로써 활성화값 분포를 적당히 퍼지게 할 수 있고 정당히 퍼진 활성화값 분포는 원활한 학습을 수행하게 해준다는 점을 확인했다. 배치정규화 기법은 활성화값 분포가 적당히 퍼지도록 강제하는 기법으로 신경망을 적절한 값으로 초기화하여 그동안 많은 연구자들을 괴롭혀왔던 초기화 문제의 상당부분을 해소해 주었다. 배치정규화는 2015년에 제안된 것으로 역사가 깊지 않음에도 이미 신경망
  • 9. 학습에서 일반적으로 사용되는 기법중 하나이며 이제는 거의 필수가 되어가고 있다. 배치정규화가 이렇게 주목 받는 이유는 학습을 더 빨리 진행할 수 있으며 초깃값 설정에 크게 신경 쓸 필요가 없고 오버피팅 억제 효과가 있다는 강점들 덕분이다. - http://aikorea.org/cs231n/neural-networks-2-kr/#batchnorm - https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84% A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/ [PAGE 46] 배치정규화는 미니배치 단위로 데이터 분포가 평균이 0, 분산이 1이 되도록 정규화한다. 첫번째는 미니배치들의 평균을 구하는 수식, 두번째는 분산을 구하는 수식이고 세번째는 미니배치 앞서 구해진 평균과 분산을 이용해 각각 정규화하는 수식이다. 세번째 수식 분모에 있는 엡실론은 0으로 나누게 되는 상황을 예방하기 위해 더해주는 아주 작은 값이다. 여기까지의 수식은 단순히 미니배치 입력데이터를 정규화된 값으로 변환하는 일을 한다 마지막은 정규화된 데이터에 고유한 확대와 이동 변환을 수행한다. 감마는 확대를, 베타는 이동을 담당한다. 두 값은 1과 0으로 시작하고 학습하면서 적합한 값으로 조정해간다. (감마=1이라는 것은 1배 확대를 의미하고 베타=0이라는 것은 이동하지 않음을 뜻한다. 즉, 처음에는 원본 그대로에서 시작한다는 의미이다.) [PAGE 47] Affine(어파인)계층=행렬의 내적 배치정규화 처리는 활성화 함수의 앞(혹은 뒤)에 삽입하여 데이터 분포를 고르게 할 수 있다. 이처럼 배치정규화를 네트워크에 적용시킬때는, 특정 은닉층에 들어가기 전에 배치정규화층을 더해주어 입력데이터를 수정해준 뒤 수정된 값을 활성화 함수로 넣어주는 방식으로 사용한다. https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84% A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/
  • 10. [PAGE 49] MNIST 데이터셋에 배치정규화 계층을 사용할 때와 사용하지 않을 때의 학습 진도를 비교해보면, 확실히 배치정규화가 학습을 빨리 진전시키고 있다는 것을 확인할 수 있다. [PAGE 50] 가중치 초깃값의 표준편차를 다양하게 바꿔가면서 학습 경과를 관찰해보면, 거의 모든 경우에서 배치정규화를 사용할 때 학습 진도가 빠른 것으로 나타난다. 실제로 배치정규화를 이용하지 않는 경우에는 초깃값이 잘 분포되어있지 않으면 학습이 전혀 진행되지 않는 모습도 확인할 수 있다. 이렇듯, 배치정규화를 이용하면 학습이 빨라지고, 가중치 초깃값에 크게 의존하지 않아도 된다는 강력한 장점들에 의해 앞으로 더 다양한 분야에서 활약할 것으로 기대된다. [PAGE 56] http://aikorea.org/cs231n/neural-networks-2-kr/#reg 오버피팅 억제용으로 예전부터 많이 이용된 방법 중 가중치 감소 라는 것이 있다. 이는 학습 과정에서 큰 가중치에 대해 그만큼 큰 패널티를 부과하여 오버피팅을 억제하는 방법이다. 이러한 방식을 취하는 이유는 원래 오버피팅이 가중치 매개변수의 값이 커서 발생하는 경우가 많기 때문이다. 가중치 감소 기법 중 가장 일반적으로 사용되는 것이 L2정규화(L2 regularization)이다. 모든 가중치 매개변수의 제곱만큼의 크기를 손실함수에 더하여 제약을 거는 방식으로 구현된다. 두번째 수식이 이에 해당된다. 식에서 람다는 정규화 강도를 의미한다. ½은 정규화 값을 w로 미분했을 때   의 값을 갖도록 하기 위함이다. [PAGE 57] 훈련데이터에 대한 정확도와 시험 데이터에 대한 정확도에는 여전히 차이가 있지만, 가중치 감소를 이용하지 않았을 때(그림 6-20)와 비교하면 그 차이가 줄었다. 즉, 오버피팅이 억제되었다. (훈련데이터에 대한 정확도가 100%에 도달하지는 않았다는 점도 주목할만 하다.) 가중치 감소는 간단하게 구현할 수 있으며 어느 정도 지나친 학습을 억제할 수 있다. 그러나 신경망 모델이
  • 11. 복잡해지면 가중치 감소만으로는 대응하기 어렵다. 이럴 때 다음에서 다룰 ‘드롭아웃’ 기법을 이용한다. (해당 스크립트는 링크된 사이트와 서적 내용을 기반으로 직접 기술하였습니다.) © Software campus COMMUNITY 2017 https://www.facebook.com/groups/softwarecamp