본문 바로가기
CS/ML

11주차 - 딥 뉴럴 네트워크 학습시키기

by 빠니몽 2023. 12. 12.

12.11.2023

 

목차

1. 그라디언트가 소실되거나 폭발하는 문제

2. 프리트레이닝 된 레이어 재사용

3. 더 좋은 옵티마이저

4. 정규화를 통해 오버피팅을 피하기

5. 서머리

 

0. Introduction

복잡한 문제를 풀려고 할 때 마주치는 문제점들이 있음.

1. 아웃풋에서 인풋레이어로 갈수록 그라디언트가 vanish / explode 소실되거나 폭파될 때

2. 데이터가 충분하지 않거나 레이블이 잘 되어있지 않고, 레이블링에 많은 돈이 들어가야 할 때

3. 너무 느릴때

4. 충분한 데이터 / 노이즈가 없는 데이터가 적어서 오버피팅될 리스크가 존재할 때

 

1. 그라디언트 소실 / 폭파

gradient가 0에 가까울 정도로 작아진 경우 vanish problem 생성

gradient가 너무 커지면 explode problem 발생

두 경우 모두 아웃풋에서 인풋레이어 쪽으로 lower layer쪽으로 내려올수록 unstable gradient가 있어 발생

 

무엇이 그라디언트를 unstable하게 만드는가?

1. activation sturation 액티베이션 펑션의 포화

    sigmoid함수도 쓰면서 normal distribution도 썼기 때문에 문제가 되었음

    아웃풋이 0 또는 1로 포화(saturate)된다면 백프로파게이션을 할 때 vanish됨

2. difference between input and output variance 인풋 아웃풋 바리언스의 차이

     두개가 다르면 output variance가 input variance보다 커짐

 

1-1. Glorot and He 초기화

output variance과 inputvariance가 같으려면 항상 같은 수의 인풋 뉴런을 가져야하고

이 말은 모든 레이어의 뉴런의 갯수가 똑같아야 된다는 의미 -> 사실상 불가능

여기서 찾은 타협점이 글라롯 엔 히 초기화방법

다음 수식을 이용하여 새로운 variance를 가지는 normal distribution에서 랜덤하게 초기화하는 방법

출처: 강의자료

 

1-2. 불포화 액티베이션 함수

ReLU를 쓸 때 특히 러닝레잇이 클 때 일부뉴런이 죽는 것처럼 효과가 사라지는 경우가 있었음

이런 상황을 solve하고자 leaky ReLU를 생각해냄. 0이 아니라 0보다 살짝 떨어지는 slope을 만들어 인풋이 0인 경우를 제외하고는 아웃풋이 0인경우가 없게끔 함.

출처: 강의자료

 

2017년에는 SELU (Scaled ELU(Exponential Linear Unit)) 액티베이션 펑션이 소개됨. 

 

출처: 강의자료

 

모든 히든레이어에SELU를 적용하면, 네트워크 전체가 자동으로 normalize하는 효과를 볼 수 있다. (다음을 만족해야만)

1. 인풋 피쳐는 standardized 되어있어야 한다 (mean 0 and standard deviation 1)

2. 모든 히든 레이어의 웨이트들은 LeCun normal initialization으로 초기화되어야한다.

3. 네트워크의 아키텍쳐는 시퀀셜해야 한다.

 

1-3. Batch Normalization

glorot and he 초기화 방법이 그라디언트 소실/폭발을 상당히 낮췄지만 stability를 guarantee 하진 않았음

트레이닝, 에폭이 계속 높아지면 인풋과 아웃풋이 유지되는 효과가 떨어질 수 밖에 없음

이때 등장한게 Batch Normalization

두 입력에 대해 제로로 센터를 맞추고 normalize한 다음 두 파라미터 벡터를 이용해 스케일링과 쉬프팅을 한다.

배칠 노멀라이제이션 파라미터도 학습 파라미터 레이어드 중간에 끼워넣음.

모델이 각 인풋 노멀라이제이션을 할 수 있도록 optimal scale and mean을 찾는다.

출처: 강의자료

문제는 테스팅을 할 때 인스턴스가 하나씩 들어간다는 점. 그래서 뮤와 시그마(mean and variance)를 계산하기 어려움

테스트 데이터도 배치로 들어온다고 가정해도 idd가 만족되지 않으면 의미있는 production이 되지 않음.

테스트의 경우는 학습이 끝날 때 까지 기다렸다가 트레이닝 데이터 다 넣은 다음 마지막 mean and standard deviation 그냥 사용

백프로프간다에서 영향을 받지 않는 것들을 케라스에서는 non-trainable이라고 부른다.

1-4 그라디언트 클리핑

익스플로딩 방지법. 백프로파게이션 중 특정 쓰레스 홀드를 넘어가면 그걸 클립핑함

 

2. 프리트레인된 레이어 재사용

기존에 학습된 웨이트들을 가져와 사용하고 거기에 추가적으로 아웃풋에 가까운 곳만 만들면 된다.

디맨전이 다르기 때문에 아웃풋 레이어는 다시 사용될 수 없음.

1-1. 트랜스퍼 러닝

학습 초기 아웃풋 레이아웃은 학습이 안 되어있기 때문에 에러가 크고, 이게 전파되면 웨이트들이 불안정해지고 손상됨

학습이 어느정도 될 때까지는 reused layers들은 freeze되어야 함. 

layer.trainable = False / True 로 freeze를 시킬 수 있음

1-2. 언수퍼바이즈드 프리트레이닝

만약 레이블되지 않은 데이터가 많이 있다면, unsupervised 모델을 트레이닝할 때 이용할 수 있다.

Ground Truth가 없기 때문에 입력으로 들어간 feature를 가져올 수 있음

인풋 디맨전이 줄어들었다가 아웃풋 디맨전에서 늘려 나오면 중간에 줄어드는 부분은 피쳐를 함축하고 있는 더 적은 디맨전이 있어 레이블링이 없어도 피쳐 추출에 사용할 수 있음

3. 더 빠른 옵티마이저

3-1. Momentum Optimization

슬로프에 공을 굴리면 등가속도긴 하지만 등속은 아니라는 점에서 착안.

업데이트된 모멘텀 백터를 가지고 웨이트 업데이트

모멘텀 백터 m에서 gd를 빼준다 (a = 지금속도 - 이전속도 인 것 처럼). 이렇게 업데이트된 모멘텀 벡터로 웨이트를 업데이트한다.

모멘터 백터 m은 계속 축적되며, 아래로 갈 수록, 시간이 지날 수록 더 빠르게 수렴한다.

그냥 GD optimizer보다 플랫한 구간(gd가 0일때)을 빠르게 벗어날 수 있는 효과도 있다.

출처: 강의자료

3-2. Nesterov Accelerated Gradient(GAG)

모멘텀에서 약간의 변형이 들어간 옵티마이저 역시 바닐라 옵티마이저보다 빠름

출처: 강의자료
출처: 강의자료

모멘텀이 웨이트들을 valley 협곡쪽으로 push할 때, 1은 벨리쪽으로 푸쉬하고 2는 벨리의 바텀쪽으로 푸쉬한다.

이게 NAG가 더 빠르게 수렴하는 이유

출처: 강의자료

 

'CS > ML' 카테고리의 다른 글

10주차 - ANN  (1) 2023.12.11
[ML] 9주차 - Dimensionality Reduction  (1) 2023.11.03
[ML] 요점정리  (1) 2023.10.25
[ML] 5주차 - SVM  (1) 2023.10.23
[ML] 4주차 - 트레이닝 모델  (1) 2023.10.22