본문 바로가기
모두의 연구소 AIFFEL 교육

cs231 7장

by robotgo 2021. 2. 15.

옵티마이제이션

우리는 SGD를 배웠다. 이는 지그재그로 튄다.

새들포인트 기울기가0에 가까운 느낌

로컬미니마 : 골짜기 느낌

 

그래서 SGD +모멘텀

속력을 준다.

SGD+모멘텀 :복잡한 모델에선 잘 작동안한다. 단순한 모델에선 잘 작동한다.

 

아다그라드는 grade term기법을 사용해 조금씩 조금씩 더해준다. 분모가 조금씩 커지면서 더해주는값이 작아진다.

 

아다그라드+모멘텀 더한게 아담이다.

첫번쨰 모멘텀은 그래디언트의 가중치의 합이다 ->> 이부분 좀더 찾아봐야겠다

퍼스트모멘트는 벨로시티

세컨드 모멘텀을 나눠준다

문제가있다

초기스템에서는 문제가이는데 세컨드 모멘트를 0으로 초기화한다

세컨드 모멘트 1회 업데이트 이후에도 0에 가깝다.

세컨드 모멘트로 나눠야하는데 0에 가까워서 러닝레이트를 세컨드모멘트로 나눈값이 너무 커진다.

첫번째 모멘트도 매우작아서 어쩔땐 상쇄되서 문제가 안돼는데 가끔 첫번쨰 모멘트도 엄청 커질때가 있는데 이럴때 문제이다.

1-^-7의 의미

이 값을 더해줘서 분모가 0이 되는 것을 방지해준다.

적절한 unbiased term을 넣어줘서 초기값을 조절해준다.

아담은 항상 잘 동작한다. 아담도 오버슛하긴하지만 모멘텀처럼 엄청 오버슛하진않다.

아담의 문제 손실함수가 타원형

타원축이 기울어져있다. 아담은 해당하는 축에대한 속도조절만 가능하다.

축이 타원처럼 이상하면 이는 아담도 해결 못한다.

 

러닝 레이트 디케이 방법을 사용하면 러닝레이트를 잘 찾을 수있다.

러닝레이트 첨에 높게 설정하고 점점 줄이는 느낌으로 해본다.

decay : 깎다.

하지만 초기에는 러닝레이트 디케이를 안쓰고 일단 가장 좋은 러닝레이트를 넣는것이 좋다.

러닝레이트 디케이는 아담보다는 sgd+momentum에 더 많이 사용한다.

 

여태 배운 내용은 퍼스트오더기반 내용이였다.

빨간 점에서의 1차함수로 이루어진 미분으로 기울기를 구한다.

옵티마제이션 1차근사미분 이는 1번 미분한 것을 뜻한다.

이는 한계가 있어서 

이제는 2차근사미분을 통해 2차함수로 이루어진 미분방식을 사용한다. 이는 2번 미분한 것을 뜻한다.

이를통해 극대 극소, 변곡점, 기울기를 알 수 있다.

바로바로 미니멈으로 가기 때문에 러닝레이트가 필요없다.

해시안 행렬로 나온다. 이는 n*n형태인데 이는 너무 크다.

이는 딥러닝에는 사용할 수 없다.

이를 메모리에 저장도 못한다.

그래서 퍼시뉴턴법이나 BGFS를 쓰는데 이도 잘한다.

L-bfgs인경우 2차근차미분법인데 풀배치, 스토캐스틱 파라미터인경우 쓸수 있어서 가끔쓴다.

2차미분방법

옵티마이제이션 알고리즘은 아직

 

트레인과 테스트 에러의 격차를 줄이는법

가장쉬운방법 : 모델 앙상블

모델이 10개라면 10개 돌려보고 평균내기

앙상블 : 그대로 여러 단순한 모델을 결합하여 정확한 모델을 만드는 방법이다

위 방법은 무식하니 좋았던 부분 캡쳐(스냅샷) 스냅샷 방법이 나왔다.

모델을 독립적으로 학습하는게아니라 모델을 중간에 저장하고 앙상블 적용. -snapshots

러닝레이트 높였다 낮췄다 한다. 로스가 적은 곳을 여러 군데 도달할 수 있다. 파란깃발1개 보단 빨간깃발 3개

이는 한번만 트레이닝해도 학습결과가 좋게 한다.

또다른 방법 : 하이퍼 파라미터벡터를 이용하는 대신에 하이퍼파라미터 평균을 이용해서 조절해준다.

갭이 중요한건아니고 벨리데이션 셋 성능 극대화가 중요하다. 

 

앙상블이아닌 싱글모델의 성능 늘릴라면 레굴럴라이제이션(정규화)을 해야한다. 한번도 보지못한 데이터 성능 올리는법

로스에 추가적인 항을 삽입하는법

 

레굴럴라이제이션은 처음에 L2에 나왔는데 이는 로스에 추가적인 항을 삽입하는 법이다.

드랍아웃

fully connected와 비교를 하자면.

임의의 뉴런을 0으로 만든다 포워드 패스할때

포워드패스 할때마다 모양이 바뀐다.

액티베이션을 0으로 만든다. 나중에 이 0 과 W가 곱해질 것이다.

보통 0.5로 바꾼다. 0이아니라

컨브맵에선 전체 피쳐맵에서 드롭아웃을 사용한다.

드랍아웃이 좋은이유

너무많은 특징을 참조하면 오버핏되니 몇개 특징을 버리고 한다.

특징들 간의 상호작용을 방해한다.

일부 피쳐에만 의존하지 못하게 됀다.

이는 오버피팅을 방지해준다. 이는 앙상블 효과를 가져온다.

드랍아웃은 아주 거대한 앙상블을 다루는 느낌

네트워크 z 추가된다. z는 랜덤 테스트상에선 랜덤성은 별로다. 그래서 테스트 셋에선 랜덤성을 빼낸다(average out-언제나봐도 일관성있는).

샘플링을 통해 적분을 근사시킨다.

로컬리 칩을 이용해 적분을 할 수 있다.

출력에 드랍아웃 프로버블리티를 곱해줘야한다.

인버티드 드랍아웃

테스트 타임을 p로 나눠준다.

드랍아웃 전체학습시간 늘어남 모델수렴후에는 성능좋다.

드롭아웃은 간단한 방법으로 좋은 일반화 성능을 내는 것으로 알려져 있으나 몇 가지 단점이있다. 첫 번째는 학습 속도이다. 제거할 노드를 결정하기 위해 모든 노드에 대해 베르누이 분포로부터 샘플링을 해야하기 때문에 학습 시간이 길어진다. 두 번째는 학습율의 선정이다. 드롭아웃은 특성상 신경망 각 계층의 입력 데이터의 분포가 크게 변하게 된다. 이러한 분포의 변화는 신경망 학습이 수렴하는데 까지 긴 시간을 필요하게 하며, 이러한현상은 신경망이 깊어질수록 심화된다.

랜덤성으로 너무 핏하게 하지 않는다. 배치노말라이제이션도 잉와 비슷한 효과를낸다.

트레인엔 노이즈가 있지만 

실제로 BN을 할떈 드랍아웃 사용 안한다.

드랍아웃, BN

일반적으로 BN

그래도 오버피팅 Dropout

원본이미지를 무작위로 바꾼 이미지. 이미지를 막 자르고 나눈다.

 한장일때 성능과 나눈 이미지 성능 PCA의 방향을 고려하여 컬러지터릴 방법도 있다.

데이터 아구메이션

드랍 커넥트 - activaton과 어떤거를 0으로 만드는법 드랍아웃과 비슷

또다른 좋은 방법 : 프랙셔널 맥스풀링 레귤러라이제이션 _ 부분적으로 맥스풀링한다. 풀링조절법 많이쓰진않는데 좋아보임 

22 맥스풀링 연상 풀링연살을 수행할 지역이 임으로 선정

트레인 타임에 세플링 임의설정

stocastic depth는 많이 사용한다.

오버피팅은 충분한 데이터가 없을때 ㅁㄴㄴ제가 된다.

CNN모델

transfer lerning

이미지넷같은 큰 데이터로 학습 시킨다.

작은 데이서텟일경우 : 처음에 C를 해서 학습 시킨다. 그다음 작은 데이터셋으로 학습 시킨다. 

 

작은데이터셋이라도 잘 동작한다.

전체네트워크를 파인튜닝 할 수 있다.

데이터셋이 이미지넷같은게 아니라 엑스레이나 암 데이터같은 경우는 다른 아이디어가 필요하다.

보통 프리트레인드 워드 벡터 모델을 사용한다.

데이터셋이 크지않으면 task와 유사한 데스크셋의 프리트레인드 데이터셋을 다운받는다.

모델 zoo에서 다양한 프리트레인 모델을 다운받을 수 이싿.

데이터가 조금있으면 FC만 조절

데이터가 좀더 많으면 FC-4096도 조절

너무 다른 데이터면 다른 방법을 알아봐라

 

레귤러라이제이션 - 드랍아웃, 어규멘테이션

트랜스퍼 러닝은 해커톤에 많이 사용해야한다.

'모두의 연구소 AIFFEL 교육' 카테고리의 다른 글

cs231n 10강 RNN 2월22일  (0) 2021.02.22
CS231n 9장  (0) 2021.02.15
2021년 2월 15일  (0) 2021.02.15
모델 파라미터와 하이퍼 파라미터  (0) 2021.02.04
시그모이드 지그재그  (0) 2021.02.01