딥러닝

개요

프로그래머들이 명시적인 규칙을 충분하게 많이 만들어 지식을 다루면 인간 수준의 인공 지능을 만들 수 있다고 믿었습니다. 이런 접근 방법을 심볼릭 AI symbolic AI라고 하며 1950년대부터 1980년대까지 AI 분야의 지배적인 패러다임이었습니다. 1980년대 심볼릭 AI의 새로운 버전인 전문가 시스템 expert system이 큰 기업들 사이에서 인기를 끌기 시작했습니다. (케라스 창시자에게 배우는 딥러닝, 2017)

초창기에 인공지능 학계는 두 진영으로 분열되었다. 한쪽은 이른바 규칙 기반 또는 상징적 인공지능을 추구했다. 다른 한쪽은 통계적 패턴 인식 시스템을 구축했다. 전자는 성인이 외국어를 배우려고 노력하는 방식으로 인공지능에 접근하려고 시도했다. 후자는 아이가 첫 언어를 배우는 것과 흡사한 방식으로 인공지능을 구축하려고 시도했다. (머신 플랫폼 크라우드, 2017)

경사 하강법Gradient Descent

수식 은 상기 미분 그래프를 보면 0에 local minima, 2.25에 global minima가 있다. (위키피디어) 경사 하강법으로 minima를 찾는 알고리즘은 아래와 같다.

x_old = 0
x_new = 6
eps = 0.01
precision = 1e-5
step = 1

def f_prime(x):
    return 4*x**3-9*x**2

while abs(x_new - x_old) > precision:
    x_old = x_new
    x_new = x_old - eps * f_prime(x_old)
    print('#%d x_old:%f, x_new:%f, grad:%f, diff:%.8f' % (step, x_old, x_new, f_prime(x_old), (x_new - x_old)))
    step += 1

print("Minimum occurs at %f" % x_new)

약 70여회 반복 후 2.25를 찾아낸다.

...
#67 x_old:2.249913, x_new:2.249930, grad:-0.001772, diff:0.00001772
#68 x_old:2.249930, x_new:2.249944, grad:-0.001413, diff:0.00001413
#69 x_old:2.249944, x_new:2.249956, grad:-0.001127, diff:0.00001127
#70 x_old:2.249956, x_new:2.249965, grad:-0.000899, diff:0.00000899
Minimum occurs at 2.249965

물론 이 경우 초기값이 0보다 작다면 local minima인 0에 빠지게 된다.

성능

GPU 클라우드 서버(모델명 Tesla P40)에서 tf.device로 CPU를 강제 할당 할 경우 맥북 프로에 비해서 1/2 성능 밖에 나오지 않았다. 실제로 서버의 CPU 클럭이 맥북 프로에 비해 떨어지며(2.6 GHz vs 2.2 GHz) 무엇보다 실수로 4코어로 생성했기 때문이다. 맥북 프로는 8코어 이며, 서버에도 마찬가지로 8코어로 했을때 1.5배 정도 성능 개선이 있었다. 즉, 맥북 프로에서 25s가 걸리는 행렬 연산이 서버에서 32s에 진행됐다. GPU를 사용했을때는 14s에 끝났는데, GPU를 2장으로 지정해도 동일하다. 이는 단순 행렬이기 때문으로 보이며, 여러 채널로 레이어를 확장하여 채널별로 GPU를 할당하면 충분한 성능 개선이 이뤄질 것으로 보인다.

행렬 크기가 너무 작아 256 중간 노드를 4096으로 키웠는데, 맥북 프로에서 126s 걸리던 작업이 GPU에서 3.8s로 무려 30배 이상의 성능 개선이 있다. 앞서는 행렬 사이즈가 작아서 별다른 차이점이 없었던 것이며, 이처럼 행렬이 충분히 크면 30배 이상 개선된 속도를 보여준다. 단, 단일 행렬에서 2 GPU와 1 GPU의 속도 차이는 없었고 실제로 nvidia-smi에서 하나의 GPU만 동작하는 모습을 확인할 수 있다.

타입 노드 epoch 성능
맥북 프로 256 5000 20s
  4096 5000 239s
Tesla P40 x 1 256 5000 8.5s
  4096 5000 11.26s
Tesla P40 x 2 256 5000 8.59s
  4096 5000 11.33s

용어 정리

TeX 표기법이 잘 정리되어 있다.
역자가 『밑바닥부터 시작하는 딥러닝』 을 번역하며 딥러닝 용어표를 정리했다.

미분

(Numerical Methods for Engineers, 2009)

(a)전진차분, (b)후진차분, (c)중앙차분Centered Finite-Divided-Difference의 표현 비교. 중앙차분이 실제미분과 가장 가까운 것을 확인할 수 있다.

수치 미분의 h 즉, 값은 0.0001(1e-4)로 지정. 범위가 클수록 해석적 미분의 값과 차이가 난다. cs231n의 만족스러운 기준은 1e-7이라고.

최적화Optimization

GD vs. SGD

Sebastian Raschka의 답변에 따르면, GD는 1 epoch 동안 모든 트레이닝셋에 대한 gradients의 sum이다. 수식이 mean이 아니라 sum인데, 생각해보면 어차피 음수도 나오고 양수도 나오기 때문에 sum으로 인한 문제가 없다. 배치 단위로 업데이트 하기 때문에 batch GD라고도 불린다.

SGD는 샘플 단위로 gradients를 업데이트 한다. stochastic이라는 용어는 통계학에서 쓰이는 확률론적 근사 stochastic approximation에서 따왔다고 한다. 이런 ‘확률론적’ 특성 때문에 GD 처럼 global minima에 직접 나아가진 않지만 지그재그 형태로 접근하게 되며, cost function이 convex 형태라면 SGD 또한 충분히 global minima에 잘 수렴한다. (Bottou, Léon, 1998)

그리고 several different flavors of SGD로 shuffling에 대해 언급한다. 즉, 랜덤 샘플링은 일종의 SGD의 변종(variants)인 셈이다. 세가지 경우를 언급하는데 요점은 같다. 섞어주고 매 번 다른 데이터 batch가 들어가게 한다. TensorFlow에도 next_batch() 메소드는 shuffle=True가 디폴트 옵션으로 되어 있으며 매 배치시 데이터가 섞여서 유입된다.

MINI-BATCH는 일정 개수의 샘플을 묶어서 사용한다. 일반적인 미니 배치 사이즈는 k=50이며, 50 묶음 트레이닝 샘플 단위로 gradients 업데이트를 한다.

SGD로 학습할때 w_1950(임의의 가중치)의 값 변화 그래프

GD 기반의 다양한 최적화 알고리즘 소개를 정리한 글이다.

AdaGrad

학습률을 자동적으로 결정하는(변형하는) 방법으로 가장 많이 사용된다. (딥러닝 제대로 시작하기, 2015) 이전 기울기의 제곱합의 제곱근을 분모로 하여 학습률을 점점 낮춘다.

최적화 발달 계보

출처

기울기Gradient

경사 하강법의 기울기 업데이트 수식은 아래와 같다.

delta_w 수식은 Delta rule로 정리되어 있다.

Delta rule에서 구하기 가장 까다로운 부분은 y_j 즉, actual output이며, 이유는 이전 레이어로 깊이 내려갈수록 편미분을 하기 위해 수식을 계속 풀어헤쳐야 해서 점점 더 복잡해지기 때문이다. 행렬 연산을 이용하면 출력 레이어 부터 꾸준히 에러를 누적해 나갈 수 있으며, 이 부분이 역전파의 핵심이라고 생각한다. 기본적으로 구하고자 하는 가중치의 출력 노드 다음 노드의 activation 미분과 이전 가중치를 꾸준히 곱해 나가면 된다.

기울기 소실Gradient Vanishing

신경망이 깊을때 활성화 함수를 통한 기울기 값 0 ~ 1은 매우 작은 값이고 역전파Backpropagation중에 배가되어 깊은 망에서 소실Vanishing되는 효과를 가져온다. ReLU와 LSTM 아키텍처를 사용하여 해결하는 방법이 일반적이다.

배치 정규화Batch Nomarlization

  • 학습을 빨리 진행할 수 있다.
  • 초깃값에 크게 의존하지 않는다.
  • 오버피팅을 억제한다.

Batch Normalization과 Layer Normalization 소개

가중치 감소Weight Decay

오버피팅을 줄이기 위해 큰 가중치에 대해 L2 norm을 이용한 페널티를 준다.

에러 펑션에 L2 정규화L2 Regularization 를 추가 했다. (밑바닥부터 시작하는 딥러닝, 2016)

경사 하강법에 가중치 감소를 적용한 새로운 비용 함수:14
(개별 가중치 w_i를 업데이트 할 경우에 대한 수식)

큰 가중치에 페널티를 주고 효과적으로 모델을 제한한다.

  • : 학습률learning rate
  • : 정규화 파라미터

overfitting을 피하는 처리 과정을 규제 regularization라고 한다. L2 regularization의 경우 동일한 파라미터 수를 갖고 있더라도 사용한 모델이 기본 모델 보다 훨씬 더 overfitting에 잘 견딘다. val loss가 반대 방향으로 거의 증가하지 않음. (케라스 창시자에게 배우는 딥러닝, 2017)


2017 Book Reports · 2018 Book Reports · 2019 Book Reports · Activation, Cost Functions · Apache Thrift · C++ · Docker · Go · HTML, CSS, JavaScript · Hadoop, Spark · Information Retrieval · Java · Keras · LifeHacks · MySQL · NLP 실험 · NLP · Naive Bayes · OAuth 2.0 · OOP · PHP · PyTorch · Python Data Structure Cheatsheet · Python · RSA · Sent2Vec · Software Deployment · Support Vector Machine · Word2Vec · XGBoost · Scikit Learn · 개발 생산성 · 거리 · 기하와 벡터 · 데이터 마이닝 · 데이터 사이언스 · 딥러닝 응용 · 딥러닝 · 머신러닝 분류기 · 머신러닝 · 비지니스 · 사회심리학 · 수학 · 알고리즘 · 영어 · 이산수학 · 인공지능 · 자료구조 · 진화생물학 · 통계학 응용 · 통계학 ·
is a collection of Papers I have written.
© 2000 - Sang-Kil Park Except where otherwise noted, content on this site is licensed under a CC BY-NC 4.0.
This site design was brought from Distill.