-
[10주차 - Day3] Deep Learning 최적화교육/프로그래머스 인공지능 데브코스 2021. 7. 28. 20:21728x90
Deep Learning: 신경망의 기초 - 심층학습 최적화
신경망의 가장 기본적인 연산의 단위
1. 들어오는 입력에 대해 각각의 곱셈을 통해 신호를 증감
2. 하나의 신호로 합침(내적)
*여기까지만 하면 선형적 연산만 있는 것
선형적 연산만 있으면 공간의 변화를 일으키기는 있지만 의미를 두드러지게 하는 건 힘듦
...다음층의 가중치*(가중치*입력)...->단순 행렬의 곱
3. 비선형 활성함수 통과
2.5. 활성함수
활성함수 변천사 : 선형->계단->tanh(시그모이드)->ReLU
시그모이드 함수는 활성값이 커지면(양 끝단 값이 되면) 포화상태가 되고 경사도가 0에 가까운 값을 출력함, output gradient*local gradient(upstream gradient)를 통해 input gradient(downstream gradient)를 구하는 오류 역전파 과정 중에서 upstream gradient가 0에 가까워져서 output gradient가 전달되지 못 하는 gradient vanishing문제 발생->매개변수 갱신(학습)이 느려짐
ReLU(Rectified Linear Unit)활성함수
경사도 포화(gradient saturation)문제 해소
0을 기점으로 아래는 0으로 위는 linear, 자기 자신을 내보내는 함수
한 번 활성화되지 못하면 이후로부터는 탐색이 일어나지 않는 dead ReLU문제 발생
->Leaky ReLU라는 ReLU의 변형이 등장
0을 기점으로 아래는 작은 기울기라도 줘서 작게라도 탐색을 하도록 만듦
다양한 활성함수
최근 활성 함수들은 다음의 문제들을 해결하고자 함
- 포화된 영역이 경사도가 작아짐(sigmoid->ReLU가 나오게 된 이유)
- 출력 값이 0 중심이 아님(sigmoid->tanh, ReLU->LeakyReLU, ELU)
- 다소 높은 연산량(ELU의 Exp()함수)
2.6. 배치 정규화
더보기정규화는 이전에 데이터 전처리 부분에서 다뤘음
- 규모의 문제
- 부호가 한쪽으로 치우쳐진 문제(+/-)
공변량 변화(covariate shift)현상
- 훈련 집합과 테스트 집합의 분포가 다름
- 내부의 공변량 변화(internal covariate shift)->데이터의 분포가 수시로 바뀌는 셈이라 학습을 방해하는 요인이 됨
->정규화를 층 단위로 적용하는 배치 정규화(batch normalization)를 통해 공변량 변화 현상을 누그러뜨림
정규화는 입력이 선형연산을 거치고 나서(z) 적용하는 것이 좋음(활성함수(y)들어가기 이전)
분포를 활성함수의 0에 맞춰서 적용하는 게 학습이 잘될것(활성함수의 양 끝단에 분포가 가면 당연히 잘 안됨)
배치 정규화의 장점
- 신경망의 경사도 흐름 개선 : 분포가 왔다갔다하면서 활성함수의 양극단으로 가는 일이 감소하기 때문
- 높은 학습률 허용
- 초기화에 대한 의존성 감소 : 곱셈을 해서 나온 분포가 이상해져서 초기화해서 맞춰두고 갔는데 정규화를 통해 후보정을 해주기 때문
- 의도하지 않았지만 규제와 유사한 행동을 하며 드롭아웃의 필요성을 감소
+CNN에서는 노드 단위가 아니라 특징 맵 단위로 적용
다양한 정규화 방법들
3. 규제의 필요성과 원리
3.1. 과잉적합에 빠지는 이유와 과잉적합을 피하는 전략
대부분 가지고 있는 데이터에 비해 훨씬 큰 용량의 모델(매개변수가 많음)을 사용하기 때문에 과잉적합에 빠짐
->충분히 큰 용량의 모델을 설계한 후 학습 과정에서 여러 규제 기법을 적용
3.2. 규제의 정의
모델 용량(매개변수의 수)에 비해 데이터가 부족한 경우 부족조건문제(ill-posed problem) 푸는 접근법
=적절한 가정을 투입하여 문제를 품
->기계학습엔 '입력과 출력 사이의 변환은 매끄럽다'는 사전 지식(=가정)=>유사한 데이터는 가깝게 매핑
규제 방법 중 대표적인 방법 : 티호노프의 규제(Tychonoff’s theorem)->매끄러움 가정에 기반을 둠
현대 기계 학습도 매끄러움 가정을 널리 사용함->가중치 감쇠 기법
규제 : 일반화 오류를 줄이려는 의도를 가지고 학습 알고리즘을 수정하는 방법 모두 - Deep Learning 책의 정의
4. 규제 기법
- 명시적 규제 : 가중치 감쇠, 드롭아웃처럼 목적함수나 신경망 구조를 직접 수정
- 암시적 규제 : 조기 멈춤, 데이터 확대, 잡음 추가, 앙상블 처럼 간접적으로 영향
4.1. 가중치 벌칙
규제항
- 훈련집합과 무관
- 데이터 생성 과정에 내재한 사전 지식에 해당
- 매개변수를 작은 값으로 유지하므로 모델의 용량을 제한하는 역할
- 큰 가중치에 벌칙을 가해 작은 가중치를 유지하기 위해 사용, 주로 L2 Norm이나 L1 Norm을 사용
더보기가중치가 커지면?
자유도가 커져서 모델 용량이 커지므로 오버피팅됨
L2 Norm
규제항 R로 L2 Norm을 사용하는 규제 기법을 가중치 감쇠(weight decay)라고 부름
1. 선형회귀(linear regression)에 적용하면?
(L1규제 : Lasso regression, L2규제 : Ridge regression)
공분산 행렬 X^TX의 대각요소가 2λ만큼씩 증가->역행렬을 곱하므로 가중치가 축소하여 원점으로 당겨짐
2. MLP와 DMLP에 적용하면?
L1 Norm
규제항으로 L1 Norm을 적용하면
L1 Norm의 희소성(sparsity)효과 : 0이 되는 매개변수가 많음
선형회귀에 적용하면 특징 선택(feature selection)효과
정리
원래는 목적함수만 있는데 목적함수만 있으면 자유도가 높기 때문에 오버피팅이 발생하므로 내가 알고있는 조건(규제항)을 추가
목적함수 : 적용된 충분한 학습 모델로 훈련집합의 예측한 오차
규제 : 학습 모델이 훈련집합의 예측을 너무 잘 수행하지 못하도록 방지
규제항에서 λ는 얼마만큼 규제를 줄 건지
규제항의 효과
- 가중치에 대한 선호도 표현->λ를 통해 자유도 설정
- 학습 모델을 단순화시킴으로 일반화 성능 향상->모델의 용량 적절하게 조절 가능
- 매끄럽게하여 최적화 개선
규제항의 예
- L2 Norm : Ridge
- L1 Norm : Lasso
- 엘라스틱넷(elastic net) : L1+L2의 조합
4.2. 조기 멈춤
학습을 어느 정도하면 과잉적합 현상이 나타남->일반화 능력 저하
검증 집합의 오류가 최조인 시점에서 학습을 멈추는 조기 멈춤(early stopping) 규제
- 순진한 버전 : 현실 반영X, 한번이라도 오르면 멈춤
- 참을성을 반영한 버전 : 현실 반영O, margin을 두고 올라가는 추세가 보이면 멈춤
4.3. 데이터 확대
오버피팅은 모델용량의 자유도를 결정하기에 데이터가 부족해서 생기는 현상이므로 데이터를 늘려서 해결!
데이터의 고유한 법칙을 변형시키지 않으면서 확대해야함
ex1)MNIST-affine변환(이동translation, 회전rotation, 반전reflection)
한계 : 수작업 변형, 모든 부류가 같은 변형 사용
ex2)모핑(morphing)을 이용한 변형
비선형 변환으로 아핀 변환에 비해 다양한 형태의 변환
ex3)잡음 추가, cropping등
4.4. 드롭아웃
완전연결층의 노드 중 일정 비율(일반적으로 p=0.5)을 임의로 선택하여 제거하고 남은 부분 신경망 학습
부분 신경망을 만들고 앙상블하는 기법을 사용
완전연결을 하면 가중치가 비슷해지면서 특징을 제대로 뽑을 수 없는데 부분연결을 사용하면 특징을 두드러지게 추출가능
요즘엔 드롭아웃을 잘 안 쓰고 batch normalization을 사용 why?
batch normalization은 어떤 확률분포든지 문제를 가장 잘 풀 수 있는 분포로 후보정하겠다는 것
이게 드롭아웃이랑 비슷한 효과를 내기때문에 요걸 더 많이 사용
드롭아웃 알고리즘
- 드롭아웃 비율 설정
- 드롭아웃된 부분 신경망으로 전방 계산
- 오류 역전파를 이용하여 그래디언트 구함
참거짓(boolean)배열 π로 노드 제거 여부를 표시
π는 샘플마다 독립적으로 난수를 통해 설정
일반적으로 입력층 제거 비율=0.2, 은닉층 제거 비율=0.5로 설정
4.5. 앙상블 기법
서로 다른 여러 개의 모델을 결합하여 일반화 오류를 줄이는 기법
앙상블 수행방법
- 서로 다른 예측기를 학습
- 배깅(bagging(bootstrap aggregating)) : 동시다발적으로 학습, 훈련집합을 여러번 샘플링하여 서로 다른 훈련집합구성
- 부스팅(boosting) : 모델끼리 상호보완적인 관계가 되도록 순서대로 학습, j번째 예측기가 틀린 샘플을 i+1번째 예측기가 잘 인식하도록 연계성을 고려
- 학습된 예측기를 결합=모델 평균(model averaging)
5. 하이퍼 매개변수 최적화
학습 모델에는 두 종류의 매개변수 존재
- 내부 매개변수(parameter)(=가중치, weight) : 학습 알고리즘이 최적화
- 하이퍼 매개변수(hyper-parameter) : 모델의 외부에서 모델의 동작을 조정함, 사람에 의해 결정 ex)은닉층의 개수, CNN의 필터 크기와 보폭, 학습률 등
하이퍼 매개변수 탐색방법
- 수동 탐색
- 격자 탐색(grid search) ex)로그 공간(log space)간격으로 탐색
- 임의 탐색(random search) : 난수로 생성하여 조합
- 자동 탐색 : 학습을 통해 탐색, 자동화된 기계학습(automated machine learning)
하이퍼 매개변수를 찾을 때 차원의 저주 문제 발생
->매개변수가 m개이고 각각이 q개의 구간이라면 q^m개의 점을 조사해야하기 때문
->격자 탐색보다 임의 탐색이 성능이 좋음 why?격자 탐색으로는 놓치는 부분이 발생하기도 함
->임의 탐색 시 하이퍼 매개변수를 튜닝할 때 임의의 랜덤 변수를 크게 보다가 전체적인 경향성이 보이면 그 안에서 세밀하게 보는 탐색(coarse-fine search)을 함
6. 2차 미분을 이용한 최적화 방법
이전까지는 w의 최적화를 하는 방법을 1차 미분(gradient)를 이용해서 진행=경사 하강법
경사 하강법의 개선책
- 경사도의 잡음을 줄임 ex)미니배치
- 2차 미분 정보 활용
6.1. 뉴턴 방법
1차 미분 정보로는 빨간색 경로를 알 수 없음
Why? 1차 미분은 현재 위치에서 지역적인 기울기 정보만 알려주기 때문
->2차 미분 정보를 활용하여 빨간 경로를 알아내는 방법이 뉴턴 방법(Newton methods)
기계학습이 사용하는 목적함수는 2차 함수보다 복잡한 함수이므로 한 번에 최적해에 도달 불가능하므로 반복하는 뉴턴방법 사용해야함
6.2. 켤레 경사도 방법
직선 탐색(line search) : 이동 크기를 결정하기 위해 직선을 탐색하고 미분
6.3. 유사 뉴턴 방법(quasi-Newton methods)
앞서 살펴본 방법들의 문제점
- 경사 하강법 : 수렴 효율이 낮음
- 뉴턴 방법 : 해시안 행렬(H) 연산 부담
->해시안 행렬의 역행렬을 근사하는 행렬 M사용=유사 뉴턴 방법
해시안 근사화하는 LFGS가 많이 사용됨
기계 학습에서는 M을 저장하는 메모리를 적게 쓰는(limited memory) L-BFGS를 주로 사용
더보기유사 뉴턴 방법 : 뉴턴 방법의 해시안 행렬의 역행렬을 직접 구해야하는데 근사화해서 구함
단위행렬로 시작해서 점진적으로 근사화해서 해시안 행렬의 역행렬을 구하는 방법이 LFGS
LFGS를 부분부분으로 쪼개서 연산해서 구하는 방법이 L-BFGS, 그래서 연산량이 적음
'교육 > 프로그래머스 인공지능 데브코스' 카테고리의 다른 글
[11주차 - Day1] Redshift 소개 (0) 2021.08.07 [10주차 - Day4] RNN(Recurrent Neural Network) (0) 2021.08.01 [10주차 - Day2] CNN Models (0) 2021.07.17 [10주차 - Day1] Deep Learning 기초 (0) 2021.07.07 [9주차 - Day4] Deep Learning 기초 (0) 2021.07.03