==============================
학습내용
[DLBasic] Optimization
[DLBasic] Optimization Assignment
[AI Math 9강] CNN 첫걸음
[AI Math 9강 퀴즈] CNN 첫걸음-1~5 시험
[DLBasic] Optimization
사실 각각의 최적화에 대해 한학기 한학기.. 로 다뤄야 할 만큼 많은데 줄이고 줄이고 줄여서 주목할만한 것들만 살펴본다고 한다. 용어들의 정확한 컨셉을 잡는게 중요
local minimum을 찾는게 목적이 된다.
- Generalization
- Under-fittingvs.over-fitting
- Crossvalidation
- Bias-variancetradeoff
- Bootstrapping
- Baggingandboosting
validation은 어떻게 나누는게 좋은가. test data는 어떤식으로든 활용해선 안된다. 단순 예측만.
variance가 낮은게 좋은거. bias는 상관X. bias가 높은건 mean과 많이 벗어난 것.
cost = bias^2 + variance + noise. 각각 trade off 관계.
Bootstrapping is any test or metric that uses random sampling with replacement.
bootstrapping 은 통계학 용어인데, 학습데이터가 고정되어 있을 때 그 안에서 subsampling을 통해서 학습데이터를 여러개를 만들고 그다음에 100개가 있으면 100개 다 쓰는게 아니라 80개씩 만들어서 그거 가지고 여러 모델이나 여러 matric을 만들어서 무언가를 하겠다. output을 통해 평균을 내겠다.
Bagging(Bootstrapping aggregating)
학습데이터가 10만개 있을 때 다 사용하는게 아니라 학습데이터를 여러개 만든다. 이 때 bootstrapping을 하는거. 일반적으로 앙상블이라고 불리기도 함. 보통 10만개 다 학습해서 돌리는게 좋지는 않고, 8만개 정도로 n개의 모델을 만든 다음 테스트 입력이 들어왔을 때 n개의 모델을 모두 돌려보고 돌려본 값들의 평균이나 voting을 통해 나온 출력값을 보는게 한 개의 모델을 쓸 떼보다 좋은성과를 내는 경우가 많음. 기본적으로 kaggle이나 대회에 나갈 때 이런 앙상블을 쓰는데 이게 bagging에 속할때가 많음.
Boosting
만약 100개의 데이터가 있다면 그 중 80개만 예측하는 간단한 모델 weak learner을 만든다. 20개는 많이 틀릴텐데 다음은 이 20개만 예측하는 모델을 만든다. 위 처럼 각각 n개의 모델을 독립적인 모델로 보는게 아니라 weak learner들을 sequence하게 합쳐서 하나의 strong learner를 만든다. 각각 wear learner들의 weight를 찾는 식으로 정보를 취합하게 된다.
practical gradient methods
Stochastic gradient descent
Update with the gradient computed from a single sample.
10만개의 데이터가 있으면 한번에 하나만 보게 해서 gradient decent를 구하고 그렇게 얻어진 gradient를 update 하고 또 한개를 구해서 update 하고 update 하고
Mini-batch gradient descent
Update with the gradient computed from a subset of data.
Batch gradient descent
Update with the gradient computed from the whole data.
사실 batch-size를 결정하는게 중요하다. 좀 작게 잡는게 좋다. 작게잡으면 flat minimum이 되고 크게 작으면 sharp minimum이 되는 경향이 있음.
On Large-batch Training for Deep Learning: Generalization Gap and Sharp Minima, 2017 논문 읽어보길 추천. 여러 실험들을 해봤다.Gradient Descent Methods
- Stochastic gradient descent
- Momentum
- Nesterov accelerated gradient
- Adagrad
- Adadelta
- RMSprop
- Adam
모멘텀, 말 그대로 운동량 모방해서. adaptive, 지금까지 변했는지 안변했는지를 확인. EMA는 gradient를 그냥 더하는게 아니라 exponential moving average.
Adam은 모멘텀과 adaptive를 잘 섞은거
Regularization
학습에 방해하기. 학습데이터에만 잘 되는게 아니라 테스트데이터에서도 잘 동작하도록.
도구라고 보면 된다.
- Early stopping
- Parameter norm penalty
- Data augmentation
- Noise robustness
- Label smoothing
- Dropout
- Batch normalization
mixup cutmix 추천.
batch norm. 왜 되는지는 모르겠는데 그냥 잘 되더라
실습
회귀문제를 풀고있다.
1-D 선형회귀. 강조하고 싶은건 최적화를 할 때 똑같이 다 하더라도 최적화 함수에 따라 결과가 다르다는걸 보여주고 싶다.
Regression with Different Optimizers
Dataset
Define Model
Check Parameters
Train
(SGD ,, ADAM 차이 알려주는거 적어야 함)
[AI Math 9강] CNN 첫걸음
그림과 함께 잘 설명되어 있기 때문에 커널을 통해 그레디언트가 어떻게 전달이 되는지, 역전파가 어떻게 이루어지는지 꼭 짚고 넘어가셨으면 좋겠습니다.
데이터 x에서 터널사이즈만큼 window를 움직여가며 계산한다. 곱하는 커널은 고정되어있음. i와 상관없이 커널사이즈는 고정이라 파라미터 수를 줄일 수 있다.
원래 +가 아니라 -인데, 공간에서는 크게 상관없어서 +로 썻다 함. 하지만 코드에서는 다르다.
사실 convolution이 아니고 cross-correlation 이라는데 역사적으로 하도 convolution 쓰다보니 굳어졌다.
https://setosa.io/ev/image-kernels/
커널의 종류에 따라 영상이 어떻게 바뀌는지
다양한 차원에서 계산 가능
1차원은 1개의 좌표계에서 움직이고 2차원은 2개, 3차원은 3개 ... 기억할건 차원이 높아진다 할지라도 i,j,k의 위치가 바뀌었을 때 커널의 값은 바뀌지 않는다. p, pg, pgr..
채널이 여러개인 2차원 입력의 경우 2차원 Convolution을 채널 개수만큼 적용한다. r,g,b 세개 있다면 커널 채널 수도 3개여야 한다. 채널이 여러개인 경우 커널의 채널 수와 입력의 채널수가 같아야 합니다.
채널이 단 1개! 여러개 하고 싶은데.. 하면 채널을 여러개
커널 개수를 조절해서 출력의 채널을 조절해준다.
Convolution 연산의 역전파는 잘 보면 재밌다. 커널 연산은 모든 입력에 공통으로 적용되기 때문에 역전파를 계산할 때도 똑같이 convolution 연산이 나오게 된다.
진짜 엄청 헷갈린다. 결과적으로 잘 살펴보면 gradient 에 대한 convolution 연산과 똑같이 나온다.
===============================
퀴즈 / 과제
3번이다. 연속이라 인테그랄.
===================================
피어세션
P(D) 랑 P(theta)가 헷갈림. 아무나 뽑았을 때 이사람 걸렷음! 확률이 P(D).
P(theta) 실제발병률.
사후확률?. 또 양성이라고 나올 확률.Precision : TP/(TP + FP)
그래서 P(D) 랑 P(theta) 나오는 부분 다시 봐야할듯.
Nestrov Accelerated Gradient, EMA 에 관해 살펴보았다.
https://i.stack.imgur.com/YrpGA.png
https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
leetcode
leetcode
bin 써서 한줄로 끝났다. 소인수분해와 haming weight알고리즘으로.
(https://en.wikipedia.org/wiki/Hamming_weight)
haming weight알고리즘
a는 홀수개 잡고, b는 짝수개 잡고.
a = 010101010101
b = 101010101010
a = 001100110011
b = 110011001100
a = 000011110001111
b = 1111000011110000
…
다른 코드
이게 제일 빠른 거였음
===
class Solution:
def hammingWeight(self, n: int) -> int:
c = 0
while n:
n &= n - 1
c += 1
return c
===
while문이 뭐 하는지.
맨 왼쪽부터 하나씩 없어지는 개념.
n &= n - 1
c += 1
알면 좋음. 그냥 오른쪽에 있는 1부터 없앴다.
만약 7이라 하면
111
110
100
000
이 됨. 한번 할 때마다 맨 오른쪽에 있는 1이 0으로 바뀌는 것.
1001001
1001000
1000000
0000000
====================================
후기
내가 놓치거나 잘못 이해한 부분이 만ㅇㅎ다. 다시 다 봐야 한다. 근데 지금 바쁘고 피곤하다..
댓글 없음:
댓글 쓰기