: 우주선의 최적궤도, 운영체제의 작업 할당 계획 등
: 훈련집합으로 학습을 마친 후, 현장에서 발생하는 새로운(unknown)샘플을 잘 예측해야 함 -> 일반화 능력이 좋아야 함
1. 훈련집합은 전체 데이터(실제, 알 수 없음) 대리자 역할
2. 검증집합은 테스트집합 대리자 역할
3. MSE, log-likelihood 등의 손실함수는 주어진 과업의 학습 성능(=판단 기준) 대리자 역할
대리자 관계
매개탐색 공간에서 목적함수의 비볼록(non-covex) 성질, 고차원 특징 공간, 데이터의 희소성 등
긴 훈련 시간
학습 과정의 성능 판정이 중요하다.
ex) 시험
e = 1/2||y-o||2
오차가 클수록 e 값이 크므로 벌점(정량적 성능)으로 활용됨
신경망 학습 과정에서 학습은 오류를 줄이는 방향으로 가중치와 편향을 교정
-> 큰 교정이 필요함에도 작은 경사도로 작게 갱신됨
-> 로지스틱 시그모이드 gradient가 미분을 하면 값이 클 때 더 작은 gradient를 가지게 된다.
0이 되는 부분이 곱해지므로, 갱신해야하는 정보를 전달이 제대로 되지 않는다.
해결 방법
1. ReLU 함수
2. MSE를 다른 함수로 바꾸자. -> 교차 엔트로피
정답(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로서 높은 값
경사도를 계산해보면, 오류가 더 큰 곳에 더 큰 벌점(경사도)부과
소프트맥스는 최대를 모방
-> 출력 노드의 중간 계산 결과의 최댓값을 더욱 활성화하고 다른 작은 값들은 억제
모두 더하면 1이 되어 확률 모방
출력층의 변화에 따라 소프트맥스의 결과도 최대 출력에 더 가까워짐 따라서 부드러운 최대 함수로 불림
모든 출력 노드 값을 사용하는 MSE나 교차 엔트로피와 달리 하나의 노드만 적용
다항 로지스틱 회귀 분석의 예
분류기의 최종 값을 확률로 표현
소프트맥스와 로그우도 목적함수
여러 연구결과들을 공유
주어진 데이터에 잘 들어맞을지는 실험을 통해 신중히 확인해야 함
첫 번째 특징에 연결되는 가중치는 두 번째 특징에 연결된 가중치에 비해 100여 배 느리게 학습됨 -> 느린 학습의 요인
가중치(gradient)가 뭉치로 증가 또는 감소하면 최저잠을 찾아가는 경로가 갈팡질팡하여 느린 수렴
특징별 독립적으로 적용
통계학의 정규 분호를 활용한 표준화 변환을 적용 -> 평균이 0이 되도록, 표준편차가 1이 되도록
최대 최소 변환을 적용 -> 0 ~ 1 값을 적용
평균점 0점으로 맞춤
분포를 1로 바꿈 -> 퍼짐의 크기를 바꿈
전처리 반드시 해야함!!!!!!!
=> 갈팡질팡 하지 않음
명복변수: 객체간 서로 구분하기 위한 변수
명목 변수는 거리 개념이 없음(남, 여)
원핫 코드는 값의 개수만큼 비트(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) 현상 누그러뜨림
현재 v값으로 다음 이동할 곳 Θ를 예견한 후, 예견한 곳의 경사도를 사용(멈춤 용이)
기존 : 현재 값에서 gradient와 momentum을 구하여 각각의 값을 더한 것
네스테로프 : 현재 값에서 momentum으로 이동시켜 놓고 gradient를 구하는 것
너무 크면 지나침(overshooting)에 따른 진자 현상, 너무 작으면 수렴이 느림
학습률에 따라 loss가 줄어는 것이 필요하다
경사도에 학습률을 곱하면 기존 경사도 갱신은 모든 매개변수에 값은 크기의 학습률을 사용하는 셈
적응적 학습률은 매개변수마다 자신의 상황에 따라 학습률을 조절해 사용
ex) 학습률 담금질(stimulated annealing) 이전 경사도와 현재 경사도의 부호가 같은 매개변수는 값을 키우고 다른 매개변수는 값을 줄이는 전략
과거의 gradient를 현재 gradient를 구할 때 사용한다.
경사도가 크면 경신값은 작아서 조금만 이동
경사도가 작으면 갱신값은 커서 많이 이동
보폭을 정해주는 적응적 학습률로 볼 수 있다.
단점
오래된 경사도와 최근 경사드는 같은 비중의 역할
-> 강사도가 점점커져 수렴 방해할 가능성
가중이동 평균(weight moving average) 기법 적용
과거의 경사도는 비중을 줄이고 최신 경사도에 비중을 높임
ada + RMSProp
amam을 사용하는 것이 효과적이고 요령이 있다면 직접 작성하여 사용하는 것이 더욱 좋다.
일반 네트워크의 문제점
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등의 버전으로 나뉨