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 |