일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 멋사 AI 교육
- 멋사 국비지원과정
- 멋쟁이사자처럼 전액국비지원
- k 디지털 후기
- 유니오르
- 멋사 AI
- 영화AI추천
- 리뷰
- 영화추천시스템
- 가브리엘마르케스
- k 디지털
- 비전공자 코딩
- 비전공자 멋쟁이사자처럼
- 멋쟁이사자처럼
- 멋쟁이사자처럼 k 디지털
- 민음사
- til
- 홍명희 임꺽정
- 문학동네
- 멋쟁이사자처럼 k-digital
- 인생책짧은글
- 이렇게 그녀를 잃었다
- 멋사 전액국비지원교육
- 추천프로젝트
- AI 국비지원
- 비전공자 코딩교육
- 인생책
- 멋사 k 디지털
- 인터뷰
- AI 코딩
- Today
- Total
글쟁이, 코딩한다
0120 / k_digital 31일차 / 딥러닝 이론 본문
0.
딥딥
딥러닝 최적화
하나. Weight Initialization.
Gradient Descent 적용을 위한 첫 단계. parameterθ 초기화
경사를 데굴데굴 굴러 가장 깊은 골짜기로. 초기화 이후 시작점을 어디로 잡을 수 있을까? 시작점은 많은 것을 바꾼다.
아래 초기화 기법들은 선형결합 값이 너무 커지거나 작아지지 않도록 초기 parameterθ를 잡아준다. 선형결합 값이 극단적이면 초기화 지점이 산으로 갈 확률이 높다.
#너무 터무니없는 곳을 잡으면 고생 #함정에 빠지거나 시간이 너무 오래
1) Xavier Initialization 자비에 초기화
표준편차가 (1 / 앞선 레이어 퍼셉트론의 숫자에 루트를 씌운 값)인 정규분포를 따른다.
#예로 앞선 레이어가 10000개면 θ 초기값은 1/100, 0.01. #다만 이 식은 나이브한 인식. 수식은 조금씩 달라진다.
#sigmoid나 tanh를 활성화 함수로 쓸 때 적용 #보통은 default
2) He Initialization 헤(흐어) 초기화
표준편차가 (2 / 앞선 레이어 퍼셉트론의 숫자에 루트를 씌운 값)인 정규분포를 따른다.
#예로 앞선 레이어가 10000개면 초기값은 1/50, 0.02. #마찬가지로 수식은 조금씩 달라지고 있다
#활성화 함수로 ReLU 쓸 때 주로 적용
둘. Weight Regularization
gradient descent 적용을 위한 두 번째 단계. parameterθ 규제화(정규화)
트레이닝 데이터만 고려한 cost function 값으로 모든 가중치를 결정할 때는 모델이 툭하면 overfitting에 빠진다
#응석쟁이 => 굴러떨어지기를 적당한 수준에서 멈추자.
이를 바로잡으려면? 새로운 cost fuction을 주자!
새 친구 MSE + λR(θ)
%모델이 복잡해질수록 θ 갯수가 늘어나고 θ 절댓값이 커지는 성질을 이용한다.
1. L1 정규화(Lasso) : R(θ) = θ절대값을 Σ
#θ lasso : L1 정규화 표현에서 제약 조건(사각형, 절대값 그래프)을 벗어나지 않으며 실제 SSE의 최소값과 가까운 점.
#θ lasso 한 축의 θ값은 0이 되기도 한다=> 가중치 낮은 열 하나를 모델에서 배제 #Feature selection 효과를 낸다.
2. L2 정규화(Ridge) : R(θ) = θ제곱을 Σ
#θ ridge : L2 정규화 표현에서 제약 조건(원 그래프)을 벗어나지 않으면서 실제 SSE의 최소값과 가까운 점.
#전반적으로 요게 overfitting을 더 잘 걷어준다
3. Lasso와 Ridge를 함께 쓰면 ElasticNet
모델이 복잡해지면(성능이 좋아지면, 올바른 예측을 위한 식이 늘어나면) R(θ)는 자꾸자꾸 커진다. 반면 MSE는 작아진다. 반비례 관계인 두 친구를 묶어 새로운 cost function으로 쓴다.
즉, MSE 줄이는 거에만 집중하지 않고 모델이 너무 복잡해지지 않는 것두 고려하겠다는 셈
Weight Decay가중치 감퇴/감소
#쉽게 생각하자. lasso, ridge, elasticnet은 cost function값을 눌러줘 overfitting을 걷어내주는 일을 한다
#회귀 ML 모델에서도 자주 만날 수 있다.
λ(Lambda) : 정규화율(Regularization Rate) : Hyper-params
; 값을 크게 줄수록 weight decay를 세게 먹인다 : overfitting을 줄여준다
; 값을 작게 줄수록 weight decay가 약하게 먹는다 : 성능이 올라갈수도?
#대부분은 default값으로 써도 괜찮다
셋. Advanced gradient descent algorithm
gradient descent 적용을 위한 세 번째 단계. 상급자 코스.
용어를 잠깐 보고 가자.
Batch(size)배치 : 임의로 설정한 일부 데이터양
Epoch에포크 : 전체 데이터를 한 번 밀어넣어 학습시킨 횟수
Iteration이터레이션 : batch size만큼 데이터를 적용한 횟수
(옆 그림은 Epoch=100, Iteration=700, 1Epoch = 7Iteration)
배치 차이.
기울기를 구하기 위해 데이터(와 그 cost function)를 얼마나 밀어넣느냐.
1) Full-batch Gradient Descent
매번 모든 데이터의 cost function을 구하며 값을 내던 기존 방법
#안정적으로 값을 조정해 나가지만, 너무 느려서 속 터짐
2) SGD (확률적 경사 하강법, Stochatstic Gradient Descent)
랜덤한 데이터 하나를 모델에 넣고 곧바로 Gradient Descent를 적용해 θ를 조정한다.
#랜덤 데이터에 따라 에러 값이 너무 흩날려서 정신 없음 #cost 값이 안정적으로 줄지 않는다
3) Mini-batch Stochatstic Gradient Descent
적당히를 모르는 두 방식의 중간. 전체 가운데 일부 데이터만 집어 넣으며 값을 조정해 나간다.
#batch size는 사람이 정한다. 고로 hyper-params, 대강 10배수로 줌
#이제는 표준 방식 #때로 데이터가 적으면 full-batch로도
SGD류 만이 아니다. Gradient Descent가 너무 더디게 가지 않도록, 또 함정에 빠지지 않도록 돕는 이들이 더 있다.
Optimizer(최적화 프로그램)
G.D. 작업을 도와주는 친구
Momentum 관성-가던 방향으로 가라 부류
Adagrad 알아서 하는 보폭-Learning Rate 조절 부류 #학습 초기에는 과감하게, 갈수록 신중하게.
Adam(Adaptive Moment Estimation) Optimizer
#가장 성능이 좋은 것으로 알려졌다 #그래도 Adagrad, RMSProp(Adagrad보다 새 보폭에 더 중점)도 함께 써보자.
넷. overfitting을 피하자
1. Dropout
한번 학습(traning)할 때마다 랜덤으로 퍼셉트론 몇 개를 꺼버린다 : 결과값을 결정하는 다양한 방법들을 주목!
#레이어 단위로 일정 비율만큼 #간단한 적용방법에도 높은 일반화 성능을 뽑아낸다
#마치 데이터에 여러 모델을 적용하는 듯한 효과
#다시 예측할때는 dropout을 걷어내야한다
2. Batch Normalization
데이터마다 feature 값이 달라지면 불균형으로 잘 굴러떨어지지 못한다
% 자릿수를 맞춘 x데이터들이 input layer로 떼굴떼굴. 그럼 히든레이어로 넘어갈 때는? 그때도 하지, 뭐.
순서. 1-선형 결합(행렬곱) -> 2-batch_normalization -> 3-Activation 함수(ReLU 등)
#대부분 Standardization #평균이 0, 표준편차가 1
맞추고 보니 x값 범위가 너무 작다. 고작 -1부터 1 사이. 거의 직선과 같아서 활성화 함수를 씌워주는 의미가 없다.
=> 그럼 다시 흩뜨리자. 범위도 좀 넓혀주고, 자리도 옮겨주고. 그러기 위해서! γ(lambda)를 곱하고 β(beta)를 더한다.
#γ, β는 컴퓨터가 찾아낼 parameterθ #우리 맘대로 굴리면 자릿수를 맞춰준 의미가 또 사라진다.
장점
#핵심은 학습속도 향상 : 학습을 더디게 만드는 스케일 불균형을 해결해주니까
#학습결과 향상 #랜덤 θ 초기값에 크게 의존하지 않음(데이터를 다듬어주는만큼) #overfitting 억제
딥러닝에서 우리가 결정해야 하는 것들
Batch Normalization정규화 : Standardization이 보통
Batch size배치 갯수
Epoch에포크 횟수 : 가능한 많이 하면 좋다. 판단은 나중에
Learning rate학습율 : 0.01, 0.001 시작이 보통
Cost(loss) function비용 함수 : 보통 회귀는 MSE, 분류는 cross-entropy
Initalization초기화 : 보통 ReLU에는 He
Optimizer최적화 프로그램 : Adam이 대세
Activation Function : ReLU 계열이 대세
...etc...
Layer size층 개수 : 첫 hidden layer는 input layer 수보다 크게
Unit size퍼셉트론,노드 갯수 : 2의 배수
위 두가지에서 보통 나오는 이야기들은 이 정도가 전부라고 한다. 이건 답이 없다
너무 많고 어려워요 ㅠㅠ
=> 그래서 전이학습 =>그래서 NAS(Neural Architecture Search) : 알아서 hyper-params를 찾아주기 : 구글의 Auto ML
몇 가지 딥러닝 이야기
++
Train data와 Test data 차이가 터지면 그대로 영원히 overfitting일까? 아닐 수도 있다!
당연히 train data에서는 학습이 많아질수록, 모델이 복잡해질수록 에러는 줄어든다.
Test data는? 에러 값이 쭉쭉 오르는 때가 있다 ; overfitting처럼 보인다
=> 하지만, 2019년 논문(deep double descent) 발표. 어느 선을 지나면 θ가 비대해질수록 test data도 에러가 줄어든다!
이후 θ가 몇십억개인 초대형 모델이 등장. 정확도를 이길 바가 없다.
_두 가지 의의
=> 거대한 리소스를 가진 대형 기업(구글 등)이 아닌 개인, 작은 기업이 모델을 만드는 의미가 얼마큼 있을까?
=> '당연한 것'은 없다. 어떤 기준이건 다 의심해볼만하다.
++
이제는 컴퓨터가 직접 인공신경망을 만들어내는 시대.
사람의 역할 : 인공신경망을 만드는 일 -> 인공신경망을 만드는 기계를 만드는 일?
++
굉장히 유명한 개발자님의 슬라이드라고 한다. 구글링을 하다보면 자주 마주쳤다. 개념 이해를 아주 쉽게 돕는다.
www.slideshare.net/yongho/ss-79607172
더 했던 것
TensorFlow에 들어갔다.
직접 기본 인공신경망 코드를 짰다. (물론 알려주는 것을 받아 적으면서). 신기했다.
내일 다시 정리한다.
'나는 코딩도 한다 > TIL' 카테고리의 다른 글
0122 / k_digital 32일차 / 딥러닝 etc (0) | 2021.01.22 |
---|---|
0121 / k_digital 32일차 / 딥러닝(TensorFlow실습, 활용사례) (0) | 2021.01.21 |
0119 / k_digital 30일차 / 딥러닝 이론 (2) | 2021.01.19 |
0118 / k_digital 29일차 / 미드프로젝트(마무리) (2) | 2021.01.18 |
0115 / k_digital 28일차 / 미드프로젝트 (2) | 2021.01.17 |