본문 바로가기
데이터 과학 관련 스터디/cs231n

cs231n 7강 Training Neural Networks, Part 2 정리

by inhovation97 2020. 12. 2.

7강 Neural NetworksTraining Neural Networks, Part 2를 포스팅하겠습니다.

내용이 점점 깊어질수록 어려워지네요.

 

지난 강의에서 많은 것들을 배웠습니다.

이번 강의는 지난강의의 연장선인 part 2부분입니다.

강의의 교수가 다시 바뀌면서 새로운 교수가 지난 6강에서의 첨언합니다.

 

지난 시간 배웠던 데이터 전처리입니다.

zero - centered에 대해서 첨언합니다.

일단 선형분류인 위와같은 상황이 있습니다.

 

왼쪽의 데이터처럼 데이터가 normalization이 안되어 있고, zero centered가 되어있지 않으면, 선이 조금만 틀어져도 오분류의 위험이 더욱 크죠. (0,0에서 그리는 저 분류 함수가 10도 정도만 틀어진다고 생각해보세요. 오분류가 쉽게 일어날 것입니다.) 

즉, w같은 파라미터의 조그만 변화에 loss function이 민감해집니다. 어려운 길을 가게 되는 것이죠.

 

반면에 오른쪽의 경우는 파라미터의 변화에 덜 민감해서 더욱 쉽게 optimization이 가능합니다.

 

이는 꼭 선형분류의 상황이 아니라 비선형 분류인 Neural Network에서도 적용됩니다.

zero mean, zero - centered가 되어있지 않다면, 가중치 w 매트릭스의 작은 변화에도 해당 layer의 output에 큰 영향이 가해질 수 있는 것입니다.

이는 batch normalization의 큰 이유중 하나인 것이죠.

 

해당 강의자가 돌린 모델의 그래프라고 합니다.

오버피팅이 되어서 regularization을 추가했다고합니다.

 

하이퍼 파라미터의 최적값을 서치하는 방법론에 대해서도 언급합니다.

넓은 범위에서 시작하고 싶을 때 쓰면 좋다고합니다.

몇 번씩 반복하면서 하이퍼 파라미터의 범위를 좁히는 인사이를 얻을 수 있는 것입니다.

 

한 학생이 질문을 합니다.

보통 몇번 정도 이용을 하는가?

연구마다 모델마다 다르지만 강연자는 3,4번 이상은 안쓴다고 합니다. 그저 범위를 줄여주는 인사이트로만 이용하는 용도인것 같습니다.

 

파라미터들마다 각각의 sensitivity가 다릅니다.

- learning rate는 굉장히 sensitive하지만, regularization은 그렇지는 않습니다.

순서에도 문제가 있을 수 있습니다.

- 최적의 lr을 찾고 다시가서 model의 size를 찾는 것은 맞지 않는 일입니다.

 

이런 부분을 생각하면 search는 그저 범위를 줄여주는 인사이트정도로만 이용하는게 맞는 것 같습니다.

 

이번 강의는 실제로 사람들이 보통 가장 많이 쓰는 optimization 알고리즘들을 설명합니다.

또한 지난 강의에서 배운 regularization은 그저 과적합을 방지하는 용도로만 배웠는데, 이번에는 Neural Network에서 쓰이는 더욱 실용적인 규제항들을 소개합니다.

 

궁극적인 목표는 최소의 loss값을 갖는 w를 찾아서 빨간 지점에 도달하는 것입니다.

이전에 SGD방식을 배웠고, 위에 코드3줄로 정말 simple했습니다

그저 기울기가 음수이면, step하고(loss function의 최소점으로 이동하는 것입니다.) 이를 계속 반복해서 optimization을 해가는 방식이었습니다.

 

하지만 이 방식은 간단한 만큼 문제를 갖고 있습니다.

 

taco shell problem

위 그림처럼 w1, w2인 2차원으로 생각해봅시다.

빨간점에서 최적점으로 갈 때, 수평으로 이동하면 매우 느리고, 수직으로 가면 비교적 빠릅니다.

loss가 수직 방향으로만 sensitive해서 동일하게 이동하지 못하고, 지그재그로 이동하게 되는 것입니다. high demension일수록 더욱 문제가 심각해져서 큰 문제라고 합니다.

 

이번에는 저도 계속해서 궁금했던 문제입니다.

파라미터 W와 loss function의 관계함수가 구불구불해서 기울기가 0이되는 지점이 극소값이 아닌경우의 문제입니다.

이는 위처럼 2개의 문제로 분류가 됩니다.

 

1. local minima

슬라이드 중 위에 있는 사진의 경우입니다. 극대값들 사이의 극소값(기울기가 0이 되는 지점)에 안착하게 되는 경우입니다. SGD 알고리즘은 기울기의 방향에 따라 이동하면서 기울기가 0인 지점을 loss의 최소값으로 찾아 최적점으로 인식하는 간단한 원리라서 해당 지점(local minima)에서 더 이상 update가 이뤄지지 않는 것입니다.

2. saddle point

슬라이드의 아래있는 사진의 경우입니다. 얘는 local minima 보다 더욱 골치 아픈 문제가 되는데 데이터가 더욱 고차원일수록 잘 일어나고, 기울기 0의 주변 지점의 기울기가 매우 작아져서 update도 굉장히 느려지는 문제가 발생합니다.

 

마지막 세번째 문제점은 SGD의 'S'인 Stochastic이 문제를 일으킨다고합니다.

미니 배치를 쓰는 SGD 알고리즘은 미니배치마다 loss를 계산하여 전진해나가는데, 이는 강의에서 expensive라고 하는데, 비효율적이라는 의미같습니다.

또한 미니배치마다 update를 위해 추정값을 이용하는데, 이것이 엄청난 noise를 일으킨다고합니다.

미니배치마다 W쪼개서 추정값을 이용하니 noise가 쌓이고 쌓여서 최적화가 약간 더러워지고(?) 저렇게 구불구불하게 비효율적으로 최적화가 이루어지게 된 것 같네요.

 

Q : full batch를 이용하는 Gradient Dscent를 이용하면, 해결될 문제인가?

A : tacoshell, saddle point 문제는 full batch에서도 여전히 존재합니다. 매우 고차원적인 상황에서는         landscape가 복잡하므로 좀 더 공상적이고, 수학적인 접근이 필요합니다.

 

일단 간단한 아이디어가 있습니다.

바로 모멘텀(운동량)입니다.

vx 코드가 추가되었는데, 이는 기울기가 아닌 rho*vx로 step이 이루어져서 기울기가 0인 지점에서도 update가 되는 알고리즘인 것이죠.

여기서 v는 가속도를 의미하며, rho는 보통 0.9, 0.99를 이용하여 가속도에 약간의 마찰값을 넣어주는 파라미터입니다.

rho는 가속도가 너무 크면 안되니까 약간의 마찰을 주는 것이죠.

매 step에서 old velocity에 friction으로 감소시키고, 현재의 gradient를 더해줍니다.

 

슬라이드의 공은 기울기가 0인 지점에서도 가속도로 step하기 때문에 update가 진행됩니다.

또 하나의 장점은 tacoshell의 문제를 어느정도 해결해줍니다.

기존 SGD는 지그재그로 최적화가 되어 poor conditioning이지만, 모멘텀 + SGD는 모멘텀이 수평방향으로는 가속도를 유지하여 민감한 방향으로의 총합을 줄여주는데 gradient의 추정값들에서의 noise들을 평균화 시켜주는 역할을 합니다. (아마도 가속도가 붙어서 step이 더 효율적으로 지그재그가 약간 방지된다는 설명인 것 같습니다.)

슬라이드처럼 smooth하게 최적화 된다고합니다.

 

왼쪽 그림을 먼저 보면, 실제로 이 두 벡터 방향의 average로 업데이트를 합니다.

이게 바로 gradient 추정값의 noise를 줄여주는 것입니다.

 

여기서 Neterov 모멘텀을 소개합니다.

빨간 스타트 점에서 velocity 방향으로 출반한 뒤, 거기서 gradient를 계산합니다.

그리거 다시 원점으로가서 actual step으로 최적화를 진행하죠.

계산 순서의 차이가 있는데, Convex optimization에서는 잘 작동하지만, Neural Network와 같은 non-convex의 문제에서는 보장된 방식은 아니라고합니다.

 

현재 v에서 step을 밟고, 거기서 gradient를 계산하는 순서입니다.

현재 지점에서 현재 velocity를 더하고, 현재v와 old v의 차이를 더해줍니다.

 

second 업데이트 부터 파라미터 벡터를 업데이트 할 때, 하단 박스를 보면 방정식을 보면 현재의 지점에서 현재 v(t+1)를 더하고, 현재 v와 oldv의 차이를 더해줍니다.

이를 error correction term이라고 하네요.

NN에서는 중요하지 않은 방식이라면서 꽤나 자세히 설명하네요 ㅋㅋ

 

 

Q : velocity의 initialization은 어떻게 시작되나?

A : 이는 항상 0입니다. velocity는 하이퍼 파라미터가 아니기 때문입니다.

 

강의를 보면 SGD는 느리고 모멘텀과 Nesterov는 약간 오버슈팅합니다.

이는 velocity때문이라고 합니다. (가속도가 있으니 약간의 오버슈팅이 생기는 것 같습니다.)

 

모멘텀과 네스테로프의 차이점은 네스테로프가 오버슈팅이 덜 하다는 것인데, 이는 시각적으로 차이가 보이죠? 아마도 전 슬라이드에서 말했듯이 현재와 old velocity간의 차이를 더해준 것의 error correction term효과인 것 같습니다. 

 

이 부분에서 한 학생이 재밌는 질문을 합니다.

 

Q : minima가 굉장히 sharp하고 narrow한 basin이라면 ? (즉, 최종 최적점의 지점이 찾기 힘든 굉장히 좁은 지점이라면?)

A : 매우 흥미로운 질문이다. 그것은 애초에 좋지않은 minima이다. 그런 minima는 오버핏의 위험성이 크다.

    데이터를 조금 더 수집한다면 사라질 landscape이며, flat한 minima로 수렴하길 원하는 이유는 그것이        더욱 로버스트 하기때문이다. SGD 모멘텀은 그런 sharp minima를 잘 스킵한다.

 

이번엔 아다그라드 방식입니다.

grad_squared를 이용하는 것이 아이디어입니다. 가속도가 아닌 기울기의 제곱값을 이용합니다.

학습중에 기울기의 제곱값을 grad_squred에 계쏙 더해나가서 update step에서 나눠 줍니다

 

이는 2가지 측면으로 생각해보면,

small gradient인 경우에는 grad_squared가 작은 값으로 나눠주니 속도가 더 잘붙습니다.

large gradient인 경우에는 큰 수로 나누어서 wiggling dimension은 slowdown해서 천천히 내려오게 됩니다.

각 상황에 우리가 원하는 수준을 어느정도 따르는 것이기 때문에 아마 velocity보다는 좀 더 융통적인 방식인것 같습니다.

 

하지만 이 방식도 문제가 있습니다. stepsize가 오랜시간 지속되는 상황에서는 grad가 매우 작아지니까 굉장히 느려집니다.

 

일반적으로 non-convex보다 convex 상황에서 아다그라드가 더욱 효과가 좋다고합니다.

non-convex에서는 saddle point에 걸린다고 합니다.

 

estimate인 grad_squared를 똑같이 이용하지만, 여기서는 train동안에 값을 계속해서 축적시킵니다.

그래서 decay 값을 삽입합니다.

decay값을 이용하니 결국은 모멘텀 방식이랑 유사합니다.

실제 gradient에 해주는게 아닌 grad_squared에 해주는 차이가 있습니다.

 

최종식이 똑같으니 아다그라드와 매우 비슷하게 step합니다. 하지만, RMSprop의 추정값들이 더욱 leaky합니다. (아마도 decay 값이 삽입하므로써 나오는 이점인것 같습니다.)

그래서 slow down 현상도 약간 해소시켜준다는 의미 같습니다.

 

SGD보다 더 잘 작동하지만, 약간의 차이가 있습니다. 

모멘텀은 오버슛 하다가 다시 되돌아오지만, RMSprop은 오버슛이 심하지 않습니다.

 

 

여기서 가속도를 이용하는 모멘텀과 squared gradient를 scling방식으로 이용하는 아이디어 2가지를 봤습니다.

아직 아다그라드와 모멘텀 둘 다 아직 불안정한 방식입니다.

 

 

이 두가지를 모두 쓴다면??

 

바로 Adam 알고리즘입니다.

almost 버전입니다.

강의에서 설명을 위해서 슬라이드를 나눠놨어요.

 

first step에서는 second_moment가 0으로 시작하니까 1번의 업데이트로 second_moment의 decay값인 beta2는 0.9 or 0.99이므로 second_moment는 아직 거의 0이죠. 따라서 아주 작은 수로 나눠주게 되니까 초반에는 large step이 가능해서 효율성이 뛰어나게 되는 것입니다.

 

full form에서는 초기 large step의 문제를 때문에 Bias correction 코드를 추가합니다.

 

Q : first moment가 너무 작아서 first step이 너무 커지면 무슨 일이 일어나나?

A : cancel each other이 된다. 가끔 first step이 너무 커질 때가 있는데, 이는 landscape의 bad part로 빠지      게 되고, 첫 단추를 잘 못 꿰니 후의 step들을 망치게 된다.

 

자연상수 e는 보통 -7이나 -8의 이 잘 작동한다고 합니다.

 

아담이 최고 성능을 냅니다.

아담은 실제로 많이 쓰이는 알고리즘이라고 합니다.

 

지금까지 우리는 이렇게 도함수를 이용해서 기울기 값을 통해 최적화를 해나갔습니다.

 

그런데 이런 방법도 있습니다.

2차 함수를 이용해서 jump하는 것입니다.

Second-Order라고 하네요.

 

 

쳐다보기 싫은 것들이 나옵니다.

저는 그냥 pass했습니다. NN인 non-convex에서는 2차함수에 근사해서 이용하는 방법을 잘 쓰지 않는다고 합니다.

왜냐하면 헤이시안 행렬을 이용할때에 NN은 너무나도 고차원이라 연산량이 벅차다고 하네요.

 

얘도 그냥 패스합니다. 잘 안쓴다네요...

 

오른쪽 그래프가 이제는 과적합된 그래프임을 아실겁니다.

우리는 train과 val셋간의 오차를 줄여야겠지요?

 

모델의 정확도를 높이는 방법 중 하나인 앙상블을 알아봅니다.

 

여러 모델들을 평균내서 이용하는 앙상블 모델은 darastic한 향상 보다는 최종 성능에서 1~2% 성능을 끌어올리는 데에 많이 이용한다고 합니다. 보통 경진대회에서 많이하죠.

 

모델을 여러개 만드는 것이 비용, 시간적으로 부담이 될 수 있습니다.

오른쪽 그래프처럼 학습 도중에 모델들을 저장해서 이를 평균내는 방식이 있습니다.

일정 구간을 정해놓아서 체크포인트를 두는 것입니다.

원래는 모델이 1개지만 뻥튀기 시키는 느낌인거죠.

 

오른쪽 그래프를 보면, 각각 learning rate를 다르게해서 여러 지점에 수렴하게끔 만든 것이죠.

 

Q : 앙상블을 할 때, 하이퍼 파라미터를 전부 똑같이 맞추는가?

A : 좋은 질문이다. 그렇지 않은 경우도 더러 있다. 가령 사이즈가 다른 모델들에서는 하이퍼 파라미터를 똑       같게 맞출 수 없다.

 

학습 도중에 autual parameter vector 대신에 exponentially moving everage of the parameter vector를 이용하는 것인데, 이게 네트웍을 smooth 앙상블 시켜준다고합니다. polyak averaging이라고 하는데, 잘 이해는 안가네요...

도움이 될 수는 있지만, 실제로 잘 쓰이지 않는다고해요.

 

이제는 이 그래프가 과적합을 의미하는 그래프임을 알죠!

지난 강의에서 과적합을 줄이는 방식중 하나는 규제항을 추가하는 것이라고 배웠습니다.

 

 

하지만 배웠던 L1, L2는 NN에서 많이 안쓰인다고합니다.

 

매우 간단하지만 효과적인 방식 중에 하나가 바로 dropout입니다.

임의로 layer에 1번씩 Dropout을 넣어주는데, 몇몇 노드들을 랜덤하게 off해버리는 것입니다.

foward pass 과정에서 일부 뉴런의 activation 값을 0으로 만들어 버립니다.

 

Dropout 방식은 대부분 FC layer에서 하지만, CNN layer에서도 가끔씩 하기도 한답니다.

때때로 전체 feature map에서 랜덤으로 dropout 시키기도 하고, channel dimension이 있는데 어떤 채널을 통째로 drop시키기도 합니다.

이게 랜덤으로 element(픽셀값들?)을 드롭하는게 아니라는 것이죠.

 

슬라이드를 보시면 네트웍의 그림이 살짝 더러워지죠? 이렇게 네트웍을 더럽히면서까지 이를 쓰는 이유는 무엇일지 생각해보면, 각각의 뉴런은 이미지의 어떤 부분을 담당하는 전문가라고 한 적이 있습니다.

 

이 dropout은 전문가의 일정 능력을 저하시키는 것이 아니라 전문가의 수를 줄여 과적합을 막는 것이라고 이해하면 좋을 것 같습니다.

이를 co-adaptation of feature를 예방한다고 하네요. 

 

네트웍이 한 피쳐에 많은 전문가들이 필요없다는 것이죠.

 

최근에는 dropout을 train시에 model 내에서의 앙상블이라고 표현한다고합니다.

아까의 피쳐를 잡는 전문가 노드 1개 1개를 모델로 생각한다고 생각해보세요!

 

슬라이드의 노드를 위에서부터 봅시다.

FC층에의 4096의 binary mask들이 위에서부터 노드가 아래로 갈라지죠?

이 하위 subnetwork가 지수적으로 갈라지고 이 뉴런들이 증가시키는 것을 dropout으로 약간 막아준다고 이해하시면 됩니다. 그래서 네트웍의 복잡함을 줄여서 과적합이 방지되는 과정인거죠.

 

그렇다면 test time에서는 드랍아웃을 어떻게 이용해야 할까요?

드랍아웃은 랜덤으로 노드를 꺼준다고 했습니다.

Z는 드랍아웃으로 인해 랜덤의 값을 부여하는 것입니다. 아마 노드에 관여하는 값이겠지요?

 

모델은 test time에 결과를 도출할 때마다 바뀌는 값이 들어가면 곤란할겁니다.

모델을 매번 약간 다른 모델을 쓰면 안되죠.

 

그래서 이 random성을 average out 시켜주는 시도를 합니다.

적분을 통해서 누적 확률값을 이용하고 싶지만, 적분 적용이 쉽지 않은게 문제입니다.

 

Z를 랜덤으로 여러번 샘플링해서 average out 시키는데, 이 방식도 랜덤하게 Z를 샘플링하게 되니 의미가 없습니다.

 

integral을 근사시킬 간단한 방식이 있습니다.

 

슬라이드를 간소화시킨 single 뉴런이라고 봅시다.

output이 a 일때 x,y가 input이고 w1,w2의 가중치가 있습니다. a = w1x+w2y인데, 이 네트웍을 train과정에서 0.5로 dropout하면, 분해해서 계산할 수 있고 위 식 처럼 4개의 dropout mask가 있고 0.5(w1x+w2y)인 것입니다. 

그저 확률값인 1/2를 곱해준것과 같습니다.

복잡한 적분을 local cheap방식으로 근사시킨 것이라고 하네요.

(아마도 제가 봤을 때는 1/2개의 노드들이 0의 값을 가지니까 avrage out 시키는 간단한 아이디어인 것 같습니다.)

 

랜덤성을 평균으로 적분 근사시키는 문제가 해결됩니다.

 

train시 forward pass에서 2줄을 추가해 0으로 만들 노드를 랜덤으로 뽑습니다.

그리고나서 선택받은 H1,H2 노드들에 확률값을 곱해주면 되는 것이죠.

 

빨간 박스를 보면 train time에서는 기존의 연산에 p값으로 나눠줍니다.

그러면 test때 p값을 곱해주지 않아도 되겠지요? 약간의 trick입니다.

이는 학습시간이 길어지지만, train에는 보통 gpu를 쓰고 결과를 빨리 뽑는 test시에는 더 빨리 더욱 일반화된 결과를 뽑아낼 수 있으니 매우 좋죠.

 

 

강의 초반에도 언급했었는데, dropout은 regularizaiton의 구체적인 예시라고 볼 수있습니다.

학습중에는 train에 너무 fit하지 않게 네트웍에 랜덤성을 부여합니다. 

그리고 test에서는 이런 randomness들을 avreage out 시켜서 일반화를 시켜주죠.

 

이런 아이디어는 Batch norm과 유사합니다. 그렇게 마찬가지로 Batch norm도 regularizaiton의 구체적인 예시죠.

Batch norm도 일반화를 위해 학습 중에 1개의 data point가 각각 다른 여러 minibatch에서 다른 data들과 배치를 이룹니다.

test시에는 이 미니배치의 확률들(랜덤성)을 global 추정값들을 써서 average out 시켜버리죠.

이게 효과가 dropout이랑 비슷합니다. idea가 완전 똑같죠?

regularicaiton을 위해 train에 random성을 부여하고 test시에는 average out시키는 idea로 dropout, BN이 있는거죠.

 

dropout은 strength를 tune할 수 있어서 더 좋다고합니다. 

 

이번에는 비슷한 아이디어를 이용한 Data Augmentation을 살펴봅니다.

vanilla version(기본)을 train할 때, data와 그 label들이 있죠?

이를 CNN단계에서 이용할겁니다.

 

학습중에 label은 보존한 채로 이미지를 변형시켜서 학습시키는 것입니다.

 

그리고나서 train시에 다른 사이즈의 sample crop(중간 프레임, 각 모서리의 프레임, 뒤집기 등등)들을 random으로 수집합니다.

test에서는 이 crop들을 average out 시킵니다.

 

image net 관련 논문들에 single crop 모델 성능과 10개의 crop을 이용한 모델을 비교하는 report가 많다고합니다.

 

다른 Augmentaion에는 color jittering(학습과정에서 랜덤으로 명암을 대조시킴)도 있고, 복잡하게는 PCA로 지터링하기도 한다고합니다.

data를 기반한 접근법인거죠.

근데 잘안쓴대요 ㅋㅋ

 

이 방식도 drop out과 같은 idea에서 출발한 것이라 regularizaiton의 효과가 있어서 어떤 문제에 부딪혔을때 적용해보면, 나쁘지 않다고 교수가 긍정적인 시각으로 말합니다.

 

 대표적인 regularization 기법을 이렇게 3가지를 봤습니다.

 

dropconnect는 output값이 아닌 w 매트릭스를 랜덤으로 0으로 조정하는 기법입니다.

 

또 한가지는 Fractional Max Pooling입니다.

자주 쓰지는 않지만, 좋은 idea라고 합니다.

Pooling을 연산할 때, spot을 랜덤으로 연산한다고 합니다.

이는 test시에 또 random성을 없애야겠죠? pooling region을 고정시키거나 여러개의 region을 만들어 average out 시킨다고합니다. 

 

이건 stochastic depth입니다.

train시에 네트웍의 depth를 랜덤으로 drop합니다.

test에서는 전체 네트웍을 이용합니다.

dropout과 효과가 비슷하다고합니다.

 

아래 3개는 설명 비중이 작습니다. 보통은 BN을 사용하고도 과적합이 일어나면, dropout을 추가해준다고합니다.

 

마지막은 Transfer Learning 전이 학습입니다.

CNN을 많은 데이터로 학습해야한다는 편견을 깨주었다고 하네요.

 

이렇게 CNN 네트웍이 있습니다.

우선 이미지 넷처럼 큰 data로 학습을 시킵니다.

 

1에서 훈련시킨 모델을 현재의 작은 데이터셋에 적용시키는 것입니다.

이제 우리는 많은 카테고리중 작은 카테고리로 분류할 것입니다. 가령 1000개의 카테고리를 4개의 카테고리로 줄인다고 생각합시다.

 

현재 데이터셋은 양이 적으니까 가장 마지막의 FC레이어에 최종 feature를 class score로 배출하는 층인데, 이걸 초기화시킵니다. 원래 image net에서는 학습을 4096*1000 차원이었는데, 4096*4로 바꾸는 겁니다.

4개의 class로만 분류하기위해서요.

 

그리고 last layer말고 나머지는 전부 freeze시킵니다.

마지막 layer만 가지고 지금 가진 작은 데이터셋을 학습시킬겁니다.

 

데이터의 양에 따라서 train을 다시 시킬 layer를 약간 조정해주는 fine tuning을 생각해볼 수 있습니다.

이미 잘 학습된 모델이기에 lerning rate값을 조금 낮추면 더 좋다고 합니다.

 

경우의 수는 4가지가 나옵니다.

지금 가진 데이터셋이 많다. or 적다.

지금 가진 데이터셋이 학습시킨 모델의 데이터와 유사하다. or 많이 다르다.

 

이미 학습한 모델에 포함된 레이블이 많이 포함 돼있고, 그 데이터가 작다면, linear clssifier 

이미 학습한 모델에 포함된 레이블이 많이 포함 돼있고, 그 데이터가 크면, fine tune

 

이미 학습한 모델에 포함된 레이블이 별로 없고, 그 데이터가 작다면, 노답입니다. 해당 label도 없는데, 데이터 수까지 작습니다.

이미 학습한 모델에 포함된 레이블이 별로 없고, 그 데이터가 작다면, finetune을 크게 설정하라고합니다.

 

전이 학습은 많이 이용한다고 합니다.

다시 모델을 만드는 것은 시간, 비용이 너무 많이 들겠죠...

 

왼쪽은 Object Detection

오른쪽은 Image captioning입니다.

 

둘다 이미지넷의 CNN으로 시작하는게 보이시죠?

이렇게 pretrain된 모델을 가져다 쓰는 식입니다.

슬라이드를 보면, 이미지 캡셔닝은 word2vec도 쓰네요.

 

*강의 자료

cs231n.stanford.edu/2017/syllabus.html

 

Syllabus | CS 231N

Lecture 8 Thursday April 27 Deep Learning Software Caffe, Torch, Theano, TensorFlow, Keras, PyTorch, etc [slides] [video]

cs231n.stanford.edu

 

댓글