[프로그래머스 인공지능 미니 데브코스] 수업 정리 -19- [Deep Learning: 신경망의 기초 - 심층학습 최적화]

3yeong·2022년 8월 29일
0

과학 혹은 공학에서 최적화

: 우주선의 최적궤도, 운영체제의 작업 할당 계획 등

기계학습의 최적화도 매우 복잡함

: 훈련집합으로 학습을 마친 후, 현장에서 발생하는 새로운(unknown)샘플을 잘 예측해야 함 -> 일반화 능력이 좋아야 함
1. 훈련집합은 전체 데이터(실제, 알 수 없음) 대리자 역할
2. 검증집합은 테스트집합 대리자 역할
3. MSE, log-likelihood 등의 손실함수는 주어진 과업의 학습 성능(=판단 기준) 대리자 역할

기계학습의 최적화가 어려운 이유

대리자 관계
매개탐색 공간에서 목적함수의 비볼록(non-covex) 성질, 고차원 특징 공간, 데이터의 희소성 등
긴 훈련 시간

목적함수 : 교차 엔트로피와 로그우도

학습 과정의 성능 판정이 중요하다.
ex) 시험

평균제곱오차

평균 제곱 오차(MSE) 목적함수

e = 1/2||y-o||2
오차가 클수록 e 값이 크므로 벌점(정량적 성능)으로 활용됨

큰 허점

신경망 학습 과정에서 학습은 오류를 줄이는 방향으로 가중치와 편향을 교정
-> 큰 교정이 필요함에도 작은 경사도로 작게 갱신됨
-> 로지스틱 시그모이드 gradient가 미분을 하면 값이 클 때 더 작은 gradient를 가지게 된다.
0이 되는 부분이 곱해지므로, 갱신해야하는 정보를 전달이 제대로 되지 않는다.

해결 방법
1. ReLU 함수
2. MSE를 다른 함수로 바꾸자. -> 교차 엔트로피

교차 엔트로피 목적함수

교차 엔트로피(cross entropy)

정답(label)에 해당하는 y가 확률 변수(부류가 2개라고 가정하면 y ∈{0,1})
확률 분포 p는 정답, Q는 신경망(예측) 출력
P(0) = 1 - y Q(0) = 1 - o
P(1) = y Q(1) = o
o = σ(z)
z = wx + b

P(x)와 Q(x)의 값을 극단적인 경우로 가정 1혹은 0으로 단순화 가정
잘못된 학습으로 오분류된 손실은 ∞
잘된 학습으로 제대로 분류 된 손실은 0

교차 엔트로피 목적함수

e = -(ylogo + (1-y)log(1-o))
역할을 잘 수행하는지 확인
1. y = 1, o 가 0.98일 때(예측이 잘 되는 경우)
오류 e = -(1 log 0.98 + (1 - 1)log(1-0.98)) = 0.0291로서 낮은 값
2. y가 1,o가 0.0001일 때 (예측이 잘못된 경우, 혹은 오분류된 경우)
오류 e = -(1 log 0.0001 +(1-1)log(1-0.0001)) = 13.2877로서 높은 값

공정한 벌점을 부여하는지 확안(MSE의 느린 학습 문제를 해결 확인)

경사도를 계산해보면, 오류가 더 큰 곳에 더 큰 벌점(경사도)부과

소프트맥스(softmax)함수와 로그우도 목적함수

소프트맥스(softmax) 함수

소프트맥스는 최대를 모방
-> 출력 노드의 중간 계산 결과의 최댓값을 더욱 활성화하고 다른 작은 값들은 억제
모두 더하면 1이 되어 확률 모방
출력층의 변화에 따라 소프트맥스의 결과도 최대 출력에 더 가까워짐 따라서 부드러운 최대 함수로 불림

음의 로그우도(negative log-likelihood) 목적함수

모든 출력 노드 값을 사용하는 MSE나 교차 엔트로피와 달리 하나의 노드만 적용

소프트맥스와 로그우도

  1. 소프트맥스는 최댓값이 아닌 값을 억제하여 0에 가깝게 만든다는 의도 내포
  2. 신경망에 의한 샘플의 정답에 해당하는 노드만 보겠다는 로그우도와 잘 어울림
  3. 따라서 둘을 결합하여 사용하는 경우가 많음

소프트맥스 분류기

다항 로지스틱 회귀 분석의 예
분류기의 최종 값을 확률로 표현
소프트맥스와 로그우도 목적함수

성능 향상을 위한 요령

여러 연구결과들을 공유
주어진 데이터에 잘 들어맞을지는 실험을 통해 신중히 확인해야 함

데이터 전처리

규모(scale) 문제

첫 번째 특징에 연결되는 가중치는 두 번째 특징에 연결된 가중치에 비해 100여 배 느리게 학습됨 -> 느린 학습의 요인

모든 특징이 양수인 경우의 문제

가중치(gradient)가 뭉치로 증가 또는 감소하면 최저잠을 찾아가는 경로가 갈팡질팡하여 느린 수렴

정규화(normalization)는 규모 문제와 양수 문제를 해결함

특징별 독립적으로 적용
통계학의 정규 분호를 활용한 표준화 변환을 적용 -> 평균이 0이 되도록, 표준편차가 1이 되도록
최대 최소 변환을 적용 -> 0 ~ 1 값을 적용

과정

평균점 0점으로 맞춤
분포를 1로 바꿈 -> 퍼짐의 크기를 바꿈
전처리 반드시 해야함!!!!!!!
=> 갈팡질팡 하지 않음

명복 변수(norminal value)을 원핫(one-hot) 코드로 변환

명복변수: 객체간 서로 구분하기 위한 변수
명목 변수는 거리 개념이 없음(남, 여)
원핫 코드는 값의 개수만큼 비트(bit)를 부여

가중치 초기화

대칭적 가중치 문제

대칭적 가중치는 값은 값이 됨.
-> 두 노드가 같은 일을 하는 중복 발생
난수로 초기화함으로써 대칭 파괴(symmetry break)

난수로 가중치 초기화

가우시안( Gaussian) 또는 균일(uniform)분포에서 난수 추출, 두 분포는 성능 차이 거의 없음
난수 범위는 매우 중요함
편향은 보통 0으로 초기화

사례

AlexNet : 평균 0, 표준 편차 0.01인 가우시안에서 난수 생성
ResNet : 평균 0, 표준편차 (루트2/n)인 가우시안에서 난수생성, 편향 0 설정

가중치 초기화에 따른 변화

초기화가 너무 작으면, 모든 활성 값 영이 됨, 경사도도 역시 영 학습 안 됨

초기화가 너무 크면, 활성 값 포화, 경사도는 영 학습 안 됨

초기화가 적당하면, 모든 층에서 활성값의 분포가 좋음, 적절한 학습 수행

다른 방법

Saxe2014: 가중치 행렬의 행 혹은 열이 수직(orthogonality)이 되도록 설정
분포로 난수로 가중치 설정하고 가중치 행려를 특히(SVD) 분해로 분해한 후 가중치 재조정

Sussillo2014 : 임의 행로(random walk)활용하여 설정

Sutskever2013 : 가중치 초기화와 가속도을 동시에 최적화

Mishkin2016 : 가중치 분포가 아니라 노드의 출력 값 분포가 일정하도록 강제화
수직 교칙을 적용하려 가중치를 초기화 -> 하나의 미니배치를 가지고 전방 계산을 수행하면서 가중치 조정 이때, 각 층에 대해 노드 출력값의 분산이 1이 될 때까지 가중치 조정함
==> 훈련집합에 맞는 가중치를 초기화

탄력(가속도, 관성)

경사도의 잡음 현상

기계학습은 훈련집합을 이용하여 매개변수의 경사도를 추정하므로 잡음 가능성 높음
탄력(가속도, 관성)은 경사도에 부드러움을 가하여 잡음 효과 줄임
-> 관성(가속도): 과거에 이동했던 방식을 기억하면서 기존 방향으로 일정 이상 추가 이동함
-> 수렴 속도 향상(지역 최저, 안장점에 빠지는 문제 해소)

관성을 적용한 가중치 갱신수식

속도 벡터 v는 이전 경사도를 누적한 것에 해당함(처음 v = 0로 출발)
α의 효과(관성의 정도)
α = 0 이면 관성이 적용 안 된 이전 경사도 갱신 공식과 동일
α가 1에 가까울 수록 이전 경사도 정보에 큰 가중치를 주는 셈 => Θ가 그리는 궤적이 매끄러움
보통 0.5, 0.9, 0.99 사용
(또는 0.5로 시작해 세대(epoch)가 지남에 따라 점점 키워 0.99에 도달하는 방법)

관성의 효과

지나침(overshooting) 현상 누그러뜨림

네스테로프 가속 경사도(nesterov accelerated gradient)관성

현재 v값으로 다음 이동할 곳 Θ를 예견한 후, 예견한 곳의 경사도를 사용(멈춤 용이)

기존 : 현재 값에서 gradient와 momentum을 구하여 각각의 값을 더한 것
네스테로프 : 현재 값에서 momentum으로 이동시켜 놓고 gradient를 구하는 것

적응적 학습률

학습률(learning rate) 의 중요성

너무 크면 지나침(overshooting)에 따른 진자 현상, 너무 작으면 수렴이 느림
학습률에 따라 loss가 줄어는 것이 필요하다

적응적 학습률(adaptive laearning rates, per-parameter learning rates)

경사도에 학습률을 곱하면 기존 경사도 갱신은 모든 매개변수에 값은 크기의 학습률을 사용하는 셈

적응적 학습률은 매개변수마다 자신의 상황에 따라 학습률을 조절해 사용
ex) 학습률 담금질(stimulated annealing) 이전 경사도와 현재 경사도의 부호가 같은 매개변수는 값을 키우고 다른 매개변수는 값을 줄이는 전략

AdaGrad(adaptive gradient)

과거의 gradient를 현재 gradient를 구할 때 사용한다.
경사도가 크면 경신값은 작아서 조금만 이동
경사도가 작으면 갱신값은 커서 많이 이동
보폭을 정해주는 적응적 학습률로 볼 수 있다.

RMSProp

단점
오래된 경사도와 최근 경사드는 같은 비중의 역할
-> 강사도가 점점커져 수렴 방해할 가능성

가중이동 평균(weight moving average) 기법 적용
과거의 경사도는 비중을 줄이고 최신 경사도에 비중을 높임

Adam(adaptive moment)

ada + RMSProp
amam을 사용하는 것이 효과적이고 요령이 있다면 직접 작성하여 사용하는 것이 더욱 좋다.

실습

ResNet

일반 네트워크의 문제점
1. 네트워크가 깊어지면 (레이어의 수가 증가하면) gradient가 소실되거나 폭발하는 (gradient vanishing/ exploding) 문제가 발생
2. 해결하기 위해 skipconnection 추가

Residual Block
지름길을 만들어줌

특징
1. 신호표현을 직접 학습하는 대신 잔류(residual) 표현 함수를 학습
2. 이전 레이어에서 다음 레이어로의 입력을 맞추기 위해 입력의 수정 벗이 스킵 연결(skip connection)을 도입
3. 스킵 연결은 더 깊은 네트워크를 가질 수 있게 도와줌
4. layer의 개수에 따라서 ResNet-18, ResNet-32, ResNet50, ResNet-101, ResNet-152등의 버전으로 나뉨

profile
초보 컴공

0개의 댓글