JANGUN


자바 딥러닝의 핵심


유스케 스고모리 지음
김광일 옮김



목차

1 딥러닝의 개요
2 머신 러닝 알고리즘 : 딥러닝을 위한 준비 단계
3 심층 신뢰 신경망과 적층 노이즈 제거 오토인코더
4 드롭아웃과 합성곱 신경망
5 자바 딥러닝 라이브러리 : DL4J, ND4J 등
6 실무 응용을 위한 접근 방법: 순환 신경망 등
7 기타 중요한 딥러닝 라이브러리
8 그 다음은 무엇일까?



1 딥러닝의 개요




2 머신 러닝 알고리즘 : 딥러닝을 위한 준비 단계

머신 러닝에서 학습의 필요성
- 머신 러닝이 패턴 인식의 한 방법이라는 것은 이미 알고 있다. 머신 러닝은 주어진 학습 데이터로부터 패턴들을 인식하고 분류해 해답을 찾는다.
- 수학적 모델의 파라미터들을 조정하면서 궁극적으로 경계를 결정하는 것이다. (결정 경계)

지도 학습과 비지도 학습
- 서포트 벡터 머신

- 커널 트릭


- 은닉 마르코프 모델(HMM) : 은기 마르코드 모델(HMM, Hidden Markov Model)은 비지도 학습방법의 하나로, 데이터가 마르코프 과정을 따른다고 가정한다.
- 마르코프 과정은 미래의 조건이 오로지 현재 값에 의해서만 결정되며, 과거 조건에는 관계되지 않는 확률과정(stochastic process)이다.
- HMM은 오직 한 가지 관측만 가능할 때 그 관측이 어떤 상태에서 나오는 것인지를 예측하는 데 사용된다.

- 신경망
- 로지스틱 회귀 : 로지스틱 회귀는 베리누이 확률분포를 갖는 변수들의 통계적 회귀 모델들 중의 하나다
- 강화학습


머신 러닝 애플리케이션의 절차 :
* 문제에 적합한 머신 러닝 방법의 결정
* 사용할 특징의 결정 (주제 분석 (subject analysis) , 적절한 분류기(classifier) , 특징 공학)
* 사용할 모델 파라미터 설정의 결정

다음은 머신러닝 학습 절차의 개요다.


머신 러닝의 학습 단계 :
* 학습 (training) : 모델 파라미터를 갱신하고 조정
* 시험 (testing) : 모델의 가치를 평가
적절한 모델을 얻을 때까지 학습 → 시험, 학습 → 시험 …. 과정을 반복

첫째, 원시 데이터를 학습 데이터셋과 시험 데이터셋으로 나눠야 한다.
여기서 주의해야 할 것은 학습 데이터와 시험 데이터는 반드시 분리돼야 한다는 점이다.

신경망 이론과 알고리즘
- 퍼셉트론(단일층 신경망) : 두 개의 범주에 대한 선형 분류

- 공식

f(*)는 계단 함수, E는 오차함수, η는 학습률, k는 알고리즘 스텝

머신 러닝 방법의 성능 : 혼동 매트릭스를 기반으로 한 정확도, 정밀도, 재현율 지표로 측정


- 정확도 : 데이터 전체에 대비 옳게 분류된 데이터의 비율
- 정밀도 : 정으로 예측된 데이터 대비 올바르게 정으로 예측된 데이터의 비율을 의미
- 재현율: 실제 정인 데이터 대비 정으로 예측된 데이터의 비율을 의미

로지스틱 회귀
- 퍼셉트론을 일반화한 선형 분리 모델

- 오차 함수 (크로스 엔트로피 오차 함수)
- 퍼셉트론에서는 활성화함수로 계단 함수가 사용되지만, 로지스틱 회귀에서는 시그모이드 함수가 사용


다범주 로지스틱 회귀
- 범주의 수가 K개인 경우
- 출력 식을 K-차원 범주 소속 확률 벡터로 변환하고, 시그모이드 함수의 다변량 버전인 softmax 함수를 써서 분류


다층 퍼셉트론(다층 신경망) (MLP, Multi-Layer Perceptrons)
- 퍼셉트론이나 로지스틱 회귀는 선형으로 분류할 수 있는 문제에 대해서는 효율적이만, 비선형 문제는 전혀 풀지 못한다

- MLP는 어떤 함수도 근사할 수 있다는 것이 증명




3 심층 신뢰 신경망과 적층 노이즈 제거 오토인코더

신경망의 실패
- 신경망은 비선형 분류 문제를 퍼셉트론으로 풀 수 없지만 신경망을 다층화함으로써 풀 수 있다는 것을 알았다
- 은닉층의 수를 증가시키면, 즉 은닉층을 계속 쌓아가면 신경망으로 아무리 복잡한 문제도 다 풀 수 있을까?
- 역전파 알고리즘에서는 신경망의 각 층에서 오차가 역진해 하위 입력층을 향해 차례대로 전달된다.
- 출력층에서의 오차를 입력층으로 역전파함으로써 망의 가중치를 각 층에서 순서대로 조정하고 망의 전체 가중치를 최적화한다
- 층의 수가 증가하면 역전파가 각 층을 통과하면서 오차가 점차 희석돼 사라져버리게 돼, 결국 전체 망의 가중치를 조정하지 못하게 된다
- 층간 링크의 밀도가 높은 신경망에서는 가중치가 잘 조정되지 않는다
- 기울기 소멸 문제(vanishing gradient problem) : 망 전체의 가중치를 최적화할 수 없으며, 그리고 당연히 학습이 원활히 되지 않는다

딥러닝의 진화: 돌파구는 무엇이었을까?
- 힌튼 교수, 심층 신뢰 신경망(DBN, Deep Belief Nets)
- 빈센트와 그의 동료들 적층 노이즈 제거 오토인코더(SDA, Stacked Denoising Autoencoders)
- 기울기 소멸 문제를 해결한 공통적인 접근 방법 : 층별 학습 (layer-wise training, 사전학습(pretraining) + 미세조정(fine tuning)

사전학습 (층별 학습)
- 딥러닝에서는 각 단계마다 (그리고 반자동으로) 있는 입력 데이터에서 특징을 학습한다는 것이다.
- 이것은 층이 깊어지면 특징을 더 많이 학습하는 동작원리를 암시한다.
- 이것은 보통의 다층 신경망이 할 수 없는 것이고, “기계가 개념을 배운다”라고 말하는 이유다.
- 입력 값과 출력 값을 일치시키기 위해 학습한다

- 값은 입력층에서 은닉층을 통해서 나오고 은닉층을 통해서 입력층으로 되돌아간다.
- 이때 오차를 제거하도록 망의 가중치를 조정하는 것, 즉 출력 값과 입력 값이 일치하게 하는 것이 테크닉이다.


사전학습 (층별 학습)
- 딥러닝을 통해 전체를 한 덩어리로 풀어야만 하는 문제를 살펴보면 입력 데이터는 근본적으로 어떤 패턴들로 분류될 수 있는 데이터셋이다.
- 이것은 입력 데이터 내에 어떤 공통 특징이 존재한다는 것을 의미한다.
- 그렇다면 출력 값이 해당 입력 데이터가 되는 학습 과정에서 망의 가중치는 공통 특징을 반영하는 부분에 더 집중하게 조정돼야 한다.
- 그리고 같은 범주로 분류된 데이터 내에서도 비공통 특징 부분, 즉 노이즈가 있는 부분의 가중치를 줄이기 위한 학습이 돼야 한다.

- 어떤 층에서 사전 학습이 끝나며 망은 다음 층에서 학습을 계속한다.
- 그러나 다음 그림에서 알 수 있듯이 망이 다음 층으로 학습 장소를 이동하면 은닉층이 입력층으로 바뀐다는 것을 꼭 기억해야 한다.

- 요점은 사전 학습을 마친 층을 망의 가중치가 조정되는 보통의 피드포워드 신경망처럼 취급할 수 있다는 점이다.
- 따라서 입력 값을 놓고 보면 입력층에서 망을 통해 현재 층으로 전방전파되는 값을 계산할 수 있다
- 심층 신경망의 은닉층에서는 입력이 출력과 일치되게 하는 학습을 통해 단계별로 입력 데이터에 대한 특징이 추출된다

미세조정
- 사전학습을 하는 동안은 어느 데이터가 어느 범주에 속하는지에 대한 정보가 제공되지 않는다.
- 이것은 사전학습이 비지도 학습이며, 입력 데이터만 사용해 숨겨진 패턴을 분석할 뿐이라는 것을 의미한다.
- 그러나 특징을 어떻게 추출하던지 문제를 풀지 못한다면 아무런 의미가 없다.
- 그러므로 분류문제를 적절히 해결하기 위해서는 끝내야 할 단계가 하나 더 있다.
- 그것이 미세 조정이다. 미세조정의 주요 역할은 다음과 같다.
1. 사전학습을 끝낸 심층 신경망에 출력층을 추가해 지도 학습을 수행하는 것
2. 심층 신경망 전체에 대해 마지막 조정을 하는 것

- 출력층에서의 지도학습은 로지스틱 회귀나 SVM 같은 머신러닝 알고리즘을 사용한다
- 일반적으로 계산양과 결과의 정밀도를 고러해 로지스틱 회귀가 더 자주 사용된다

- 사전학습을 완료하면 망의 가중치가 거의 다 조정된 그 지점에서부터 학습이 시작된다.
- 따라서 입력층에 근접한 층까지 오차가 적절히 전파될 수 있는 것이다
- 심층 신경망은 사전학습과 미세조정을 통해 궁극적으로 심층을 갖는 표현력이 높은 신경망이 된다.


제한 볼츠만 머신
- 심층 신뢰 신경망(DBN)의 층별학습, 즉 사전학습에 사용된 방법을 제한 볼츠만 머신(RBMs, Restricted Boltzmann Machines)이라고 한다.
- 볼츠만 머신 (BM)은 유닛들이 전부 연결돼 복잡하게 보이지만, 사실은 2개의 층이 있는 단순한 신경망이다
- 신경망에 에너지 개념을 도입
- 각 유닛은 각기 확률적 상태(state)를 갖고 있고, 전체 망의 에너지는 각 유닛의 상태에 따라 결정된다
- 옳은 데이터를 기억하고 있는 상태가 망의 정상 상태며, 이때 망은 최소의 에너지를 가진다.
- 반면에 노이즈가 섞인 데이터를 망에 제공하면 각 유닛은 각기 다른 상태를 갖지만, 이것이 정상 상태가 아니다.
- 따라서 전체 망을 안정화시키기 위해, 즉 정상 상태로 변환하기 위해 조건이 바뀐다


제한 볼츠만 머신
- 모델의 가중치가 조정되고, 망이 갖고 있는 에너지 함수를 최소화하기 위해 각 유닛의 상태가 전달된다는 것을 의미
- 이 작업으로 입력 전체로부터 노이즈를 제거하고, 특징을 추출할 수 있다
- 에너지 함수를 최소화하는 것은 오차 함수를 최적화하는 것과 같은 효과
- BM은 완전 연결망이어서 계산 시간이 엄청나다는 것

- BM과 RBM의 차이는 RBM은 같은 층 내에서는 연결이 없다는 점이다.
- 이 제한 때문에 계산 시간이 줄어들고 실제 문제에 적용할 수 있게 된다

- RBM은 에너지 기반 모델이며, 가시층과 은닉층의 상태는 확률변수로 취급된다
- 처음에 각각의 가시 유닛은 망을 통해 은닉 유닛으로 전파된다.
- 은닉 유닛은 전파된 입력에 따라 생성된 확률분포에 기반을 둔 이진수 값을 갖는다

- cj는 은닉층의 바이어스며, σ는 시그모이드 함수

- 은닉층으로부터 가시층으로 같은 망을 통해 역으로 전파됐다.
- 각각의 가시 유닛은 전파된 값에 따라 생성된 확률분포에 기반을 둔 이진 값을 갖는다

- bj는 가시층의 바이어스다. 이 가시층의 값은 원래 입력 값과 일치할 것으로 기대
- 모델 파라미터로서 망의 가중치, 가시층의 바이어스, 그리고 은닉층의 바이어스, W, b, c를 벡터 파라미터인 θ로 나타내면 위 식에서 얻어지는 p(ν|θ)가 ν의 분포에 가까워질 수 있도록 θ를 학습한다는 것을 의미

- 에너지 함수, 즉 평가 함수가 정의


제한 볼츠만 머신
- 망의 형태를 나타내는 결합확률밀도함수


- 앞의 식으로부터 파라미터 학습을 위한 식이 결정


- 따라서 로그우도함수


- 그런 후 모델 파라미터에 대한 기울기를 계산한다. 도함수는


- 모델의 확률분포 함수와 원래 데이터의 확률분포 함수를 적용시키면 단순화할 수 있다.
- 따라서 각 파라미터에 대한 기울기는 다음과 같이 나타낼 수 있다.



제한 볼츠만 머신
- 기울기 식을 구할 수 있지만, 이 식을 있는 그래도 적용하면 문제가 발생한다.
- ∑p(v)의 항을 살펴보자.
- 이 항은 모든 {0, 1} 패턴에 대해 확률 분포를 계산해야 한다는 것을 의미한다.
- 그러나 이것은 실제 데이터에는 존재하지 않는 패턴을 포함하고 있는 입력 데이터를 쓰겠다고 하는 셈이 된다.
- 이 항이 어떻게 조합 확산을 유발할 수 있는 지 쉽게 상상할 수 있으며, 이것은 실용적인 시간 범위 내에서 문제를 풀 수 없다는 것을 의미한다.
- 이 문제를 해결하기 위해 대조발산이라고 불리는 깁스 표본법이 도입됐다

- v(0)는 입력 벡터다. 그리고 v(k)는 이 입력 벡터를 써서 k회 표본을 추출해 얻을 수 있는 입력(또는 출력) 벡터다.

- 깁스 표본법을 반복해 실행해 p(v)를 근사할 때 로그우도함수의 도함수는 다음과 같이 나타낼 수 있다.


- 모델 파라미터는 다음과 같이 나타낼 수 있다

- τ는 반복 횟수이며, η는 학습률이다.
- 앞의 식에서처럼 일반적으로 표본 추출을 k회 반복할 때 CD를 CD-k로 표시한다.
- 실제 문제에 알고리즘을 적용할 때 CD-1이면 충분하다고 알려져 있다.

- RBM이 생성 모델이므로 정확도 같은 척도로 모델을 평가할 수 없다는 점을 주목하라.
- 그 대신 여기서 RBM이 노이즈가 포함된 데이터를 어떻게 변경하는 지 간단히 살펴보자.
- 학습이 끝난 RBM은 하나의 신경망으로 볼 수 있으므로 망의 가중치가 조정되며, 모델에서 입력 데이터를 망으로 전파함으로써 데이터를 복원할 수 있다

심층 신뢰망(DBNs)
- RBM에 출력층으로, 로지스틱 회귀를 추가한 심층 신경망이다
- 프로그램의 절차는 매우 간단하다. 순서는 다음과 같다.
1. 모델 파라미터 설정
2. 모델 구축
3. 사전학습
4. 미세조정
5. 시험과 평가

노이즈 제거 오토인코더 (SDA)
- SDA의 사전학습에 사용되는 방법이 노이즈 제거 오토인코더(DA, Denoising Autoencoder)이다.
- DA는 입력과 출력을 일치시키는 역할이 강조된 방법이라고 할 수 있다

- DA는 입력 데이터에 의도적으로 노이즈를 더해 부분적으로 데이터를 오염시킨다.
- 그리고 DA는 오염된 데이터를 원래 데이터로 복원시키면서 학습을 한다.
- 이 의도적인 노이즈는 입력 데이터의 범위가 [0, 1]이면 쉽게 구현할 수 있다.
- 즉, 적당한 부분의 값을 강제로 0으로 바꾸면 된다.
- 데이터 값이 이 범위를 벗어나면 예를 들어 가우시안 노이즈를 써서 구현할 수 있는데, 이 책에서는 알고리즘의 핵심을 이해하는 것에 중점을 두기 위해 [0, 1]의 경우만 생각하기로 한다.
- DA에서도 입력층/출력층 모두를 가시층이라고 한다.
- DA의 그래프 모델은 RBM의 그래프 모델과 같게 나타낼 수 있지만, 이해를 돕기 위해 다음 그림을 따르기로 하자


- x바은 오염된 데이터, 즉 노이즈가 섞인 입력 데이터다.
- 그러면 은닉층과 출력층으로의 전방 전파는 다음과 같이 나타낼 수 있다

- cj는 은닉층의 바이어스, bi는 가시층의 바이어스, σ는 시그모이드 함수를 나타낸다.

- 데이터를 오염시키고 은닉층으로 매핑하는 것은 인코드라고 하며,
- 인코드된 데이터를 원래 데이터로 복원하기 위해 출력층으로 매핑하는 것을 디코드라고 한다.
- 그러면 DA의 평가 함수는 원래 입력 데이터와 디코드된 데이터의 네거티브 로그 우도 함수로 나타낼 수 있다.
- θ는 모델 파라미터로서, 가중치와 , 가시층과 은닉층의 바이어스를 말한다.


노이즈 제거 오토인코더 (SDA)
- 이제 필요한 것은 평가 함수에 대한 이 파라미터들의 기울기를 구하는 것

- 다음과 같이 간소화된 식

- 이 함수들을 써서 파라미터의 기울기는 다음과 같이 나타낼 수 있다.

- 단지 두 항만 필요하다. 하나씩 유도해보자

- 시그모이드 함수의 도함수를 활용


- 그리고 다음 식을 얻는다.




- 그러므로 각 파라미터에 대한 갱신된 식은 다음과 같아질 것이다

- k는 반복횟수이고, η는 학습률이다.
- DA는 식의 변형을 위한 약간의 테크닉이 요구되기는 하지만, 이론 자체는 RBM에 비해 대단히 간단하다는 것을 알 수 있을 것이다

노이즈 제거 오토인코더 (SDA)
- 적층 노이즈 제거 오토인코더는 DA 층을 쌓아 올린 심층 신경망이다.
- DBN이 RBM들과 로지스틱 회귀로 구성된 것과 마찬가지로, SDA는 DA들과 로지스틱 회구로 구성돼 있다
- 사전학습에 있어서는 RBM과 DA 사이에 차이가 있지만, 미세조정에 있어서는 똑같다



4 드롭아웃과 합성곱 신경망

사전학습이 없는 딥러닝 알고리즘
- 기울기 소실 문제가 생기는 원인을 생각해보자
- 한 층에서의 델타가 문자 그대로 망의 역방향으로 전파됨으로써 이전 층의 모든 유닛에 배포된다.
- 이것은 모든 유닛이 조밀하게 연결된 망에서는 각 유닛에 역전파된 오차의 크기가 점점 작아지게 된다는 것을 의미한다.
- 역전파 식에서 보듯이 가중치의 기울기는 유닛들 사이의 가중치와 델타의 곱에 의해 구해진다.
- 따라서 항들이 많아질수록 망이 더 조밀해지고 언더플로우가 발생할 가능성이 높아진다.
- 이것이 기울기 소실 문제를 야기한다

드롭아웃
- 망이 조밀하게 연결되는 것이 문제라면 성글게(sparse) 만들어 보자.
- 그러면 기울기 소실문제가 발생하지 않을 것이며, 학습이 잘 될 것이다.
- 드롭아웃에서는 문자 그대로 유닛 들 중 일부가 학습 도중에 강제로 제거된다

- 망에서 제거된 유닛들을 x로 표시했다.
- 보다시키 제거된 유닛들은 망에 존재하지 않는 것으로 해석된다.
- 이것은 드롭아웃 학습 알고리즘이 적용되면 원래 망의 구조를 변경해야 한다는 것을 뜻한다.

- 우선 일반적인 심층 신경망을 구축할 수 있을 것이다.
- 그런 다음, 드롭아웃 알고리즘을 적용하기 위해 드롭아웃 마스크(단순한 이진 마스크)를 각 층의 모든 유닛에 더하면 된다.
- 그러면 이진 마스크에서 0 값을 갖는 유닛들이 망으로부터 제거된다.

- 얼핏 보면 DA와 드롭아웃이 비슷
- 두 가지 방법 모두 뉴런에 마스크를 적용하는 과정을 거치는 것은 맞다.
- 그러나 DA는 입력층의 유닛들에게 마스크를 적용하는 반면, 드롭아웃은 은닉층의 유닛들에게 마스크를 적용한다
- DA에서는 오염된 데이터를 한 번 만들면 전체 학습 에포크(epoch) 동안 그 데이터를 사용한다.
- 그러나 드롭아웃은 각 학습 에포크마다 다른 마스크를 적용한 데이터를 사용한다.
- 이것은 매 반복 마다 다른 모양의 신경망을 학습시킨다는 것을 의미한다.
- 드롭아웃 마스크는 드롭아웃 확률에 따라 매 반복의 각 층별로 생성된다.

- “각 단계별로 신경망의 모양이 달라도 모델을 학습시킬 수 있는 것일까?”
- 대답은 “그렇다”이다
- 드롭아웃은 입력 데이터의 특성을 반영하기 위해서 남아 있는 뉴런들에게 더 큰 가중치를 부여하기 때문에 드롭아웃을 이용해 망이 잘 학습할 수 있다.

드롭아웃(dropout) 알고리즘
- 드롭아웃 단점 : 그것은 학습하고 최적화하는 데 다른 알고리즘들보다 더 많은 학습 주기를 거쳐야 한다는 것이며,
- 이것은 최적화시키기 위해서 더 많은 시간이 걸린다는 것을 의미한다

- 시그모이드 함수나 쌍곡 탄젠트 함수 : 어떤 층에서의 입력값 혹은 오차 값이 일정 수준 이상으로 크거나 반대로 작으면 이 곡선들은 포화돼 기울기가 없어져 버린다
- 이 문제를 해결하기 위해 도입된 활성화 함수 중 하나가 정류기(rectifier)다.
- 유닛에 적용되는 정류기를 선형 정류기 유닛(ReLU, Rectified Linear Unit)이라고 한다.
- 활성화 함수 차체를 ReLU라고 불러도 된다.
- 점선은 소프트플러스 함수라고 하는 함수며, 소프트플러스 함수의 도함수가 로지스틱 함수다

- 소프트플러스 함수는 ReLU에 대해 매끈하게 근사하는 관계를 갖고 있다.
- 위의 그림에서 보듯이 정류기는 시그모이드 함수나 쌍곡 탄젠트 함수보다 단순하므로, 딥러닝 알고리즘에 적용하면 계산 시간이 줄어들 것이라는 점을 쉽게 예상할 수 있을 것이다.
- 더구나 정류기의 도함수(역전파 오차를 계산할 때 필요하다) 역시 단순하므로 계산 시간을 단축할 수 있다


- 정류기와 정류기의 도함수가 매우 희박하므로, 신경망 또한 학습을 통해 희박하게 될 것이라는 점을 쉽게 예상할 수 있다.
- 시그모이드 함수나 쌍곡 탄젠트 함수에 있는 곡선 성분이 없으므로 더 이상 기울기 포화에 대해 걱정하지 않아도 된다는 것도 알 수 있을 것이다

- 드롭아웃과 정류기 테크닉을 써서 단순한 심층 신경망이 사전 학습 없이도 과제에 대해 학습을 할 수 있게 된다.
- 드롭아웃 알고리즘의 구현을 위한 식 측면에서 보면 드롭아웃 알고리즘은 다층 퍼셉트론에 단순히 드롭아웃 마스크를 더하는 것이다

- h(∙)은 활성화 함수며, 이 경우는 정류기다
- 이 식은 드롭아웃이 없는 은닉층의 유닛을 위한 식이라는 것을 알 수 있을 것이다.
- 드롭아웃이 하는 일은 단지 마스크를 적용하는 것이다

- p는 드롭아웃의 확률을 나타내며, 일반적으로 값을 0.5로 설정한다.
- 이것이 전방 활성화를 위해 해야 할 일의 전부다.
- 식에서 알 수 있듯이 이진 마스크 부분만이 일반 신경망과 차이가 나는 부분이다.
- 그리고 역전파를 하는 동안 델타에 대해서도 마스크를 더해준다

- 이 식에서 다음과 같이 델타를 정의할 수 있다

- 여기서 En은 평가 함수다
- 여기서 델타는 다음과 같이 나타낼 수 있다

- 이제 필요한 공식이 모두 갖추어졌으니, 구현만 하면 된다.

- 학습 다음에는 시험 단계다.
- 그러나 조정된 모델에 시험 데이터를 적용하기 전에 망의 가중치를 설정해야 한다.
- 드롭아웃 마스크들은 시험 데이터에 간단히 적용할 수 없다.
- 마스크를 그냥 적용하면 각 망의 형태가 달라지며, 어떤 특정 유닛이 어떤 특정 특징에 대해 큰 영향을 가질 수 있어서 결과가 달라질 수 있기 때문이다.
- 따라서 그렇게 하지 앟고 대신 망의 가중치를 매끄럽게 만든다.
- 이것은 모든 유닛에게 동일하게 마스크가 적용되도록 망을 시뮬레이션한다는 것을 의미한다.
- 이것은 다음 식을 이용해서 할 수 있다.

- 모든 가중치에 드롭아웃이 아닐 확률을 곱한다.

합성곱 신경망 (CNN, Convolutional Nueural Networks) : 1998년 르쿤 외
- CNN에서는 합성곱 층(convolutional layers)과 수집 층(pooling layers)를 통해 2차원 데이터로부터 특징을 추출하며, 이 특징들은 보통의 다층 퍼셉트론에 입력된다.
- 이 MLP 처리 과정은 인간 두뇌의 시각 피질에서 영감을 받은 것이며
* 입력 데이터를 여러 개의 영역으로 분할한다. 이 과정은 인간 시각세포의 수용 영역에 해당된다.
* 해당 영역에서 에지(edge)와 위치 수차(aberrations) 같은 특징들을 추출한다.

- CNN은 이미지 인식에 적합하게 특화된 몇 가지 타입의 층들로 구성돼 있다
- CNN에는 합성곱 층과 수집 층(부차 샘플링 층이라고도 함)의 2가지 층과 완전 연결 다층 퍼셉트론으로 구성돼 있다

합성곱 층
- 합성곱을 수행하는데, 이것은 특징을 추출하기 위해서 여러 가지 필터를 적용한다는 것을 의미한다
- 이 필터들을 커널(kernels)이라고 하며, 합성곱한 이미지들을 특징 지도(feature maps)라고 부른다


- 커널은 이미지 위를 지나가면서 커널 내 값들을 곱셈 필터로 해서 합을 계산한다.
- 커널 값을 바꾸면 여러 가지 다양한 특징들을 추출할 수 있다는 점을 알 수 있을 것이다


- 좌측의 커널은 색의 차이를 강조하게 되므로 이미지의 에지를 추출하며, 우측 것은 원래 값을 약화시키므로 흐려진 이미지를 추출한다


- CNN의 강점은 합성곱 층에서 이 필터 값들을 손으로 직접 설정할 필요가 없다는 것이다.
- 한 번 초기화를 하면 CNN은 학습 알고리즘을 통해 스스로 적당한 커널 값을 학습하게 되며(CNN에서 학습하는 파라미터는 커널의 가중치라는 뜻이다),
- 최종적으로는 이미지를 매우 정교하게 분류할 수 있다

- 합성곱 층(커널)이 있는 신경망이 고정밀 예측을 할 수 있는지 생각해보자.
- 여기서의 핵심은 지역 수용 영역(local reception field)이다
- 합성곱 층의 뉴런들의 연결은 커널 크기에 의해 제약을 받는다는 것을 볼 수 있다.
- 따라서 수용 영역이 지역적으로 제한을 받는 신경망은 커널이 최적화되면 평행 이동 불변성(translation invariance)을 획득할 수 있다
- 평행이동 불변성: 객체 인식에서 불변성이란 객체의 모습이 어느 정도 바뀌어도 제대로 객체를 식별할 수 있는 능력을 말한다.
- 평행이동, 회전, 크기, 조명 등 다양한 변화 요인에 대해 불변성을 갖는 신경망이 잘 학습된 신경망이다

- 커널은 각각 자기만의 값을 가지고 이미지에서 해당하는 특징을 추출한다.
- 특징 지도의 수와 커널의 수는 항상 같다는 것을 기억해두자.
- 이것은 커널이 20개가 있으면 20개의 특징 지도, 즉 합성곱한 이미지가 있다는 것을 뜻한다


- 이미지를 채널별 데이터로 분해하고, 커널을 적용하고, 다시 다채널 이미지로 결합하는 것이다
- 계산의 관점에서 보면 커널의 수는 가중치 텐서의 차원으로 표현된다.


수집 층(pooling layer)
- 수집 층은 학습을 시키거나 스스로 학습하지 않으며, 합성곱 층에서 전파돼 온 이미지들을 다운샘플링 할 뿐이다


- 최대값 수집 층에서는 입력 이미지를 겹치지 않는 부차 영역들로 분할한 후 각각의 부차 영역에서 최대값들만을 추출한다.
- 이 과정은 평행이동 불변성을 유지시킬 뿐만 아니라 상위 층에서의 계산 부담도 덜어준다.
- CNN은 합성곱과 수집 때문에 입력 데이터로부터 강건한(robust) 특징들을 추출할 수 있게 된다.

식과 구현

- M x N 크기의 이미지와 m x n 크기의 커널이 있으면 합성곱은 다음과 같이 나타낼 수 있다.


- w는 커널의 가중치, 즉 모델 파라미터이다.
- 합을 계산할 때 1부터가 아니라 0부터 계산한다는 점을 기억해두기 바란다.
- 그러나 위의 식은 채널에 대한 정보를 포함하고 있지 않으므로, 다중 합성곱 층을 고려할 때 아직 충분하지 못하다.
- 다행히 커널에 한 가지 파라미터만 추가하면 되므로 어렵지 않다.

- c는 이미지의 채널을 나타낸다.
- 커널의 수가 K고 채널 수가 C면 W ∈ R(KxCxmxn)이 된다.
- 그리고 식으로부터 합성곱한 이미지의 크기는 (M-m+1) x (N-n+1)이다

- 합성곱 처리 후에는 합성곱 값은 활성화 함수에 의해 활성화된다.
- 여기서는 요즈음 가장 많이 사용되는 ReLU를 사용한 CNN을 구현하고자 한다.
- 그러나 원한다면 시그모이드 함수, 쌍곡 탄젠트 함수, 또는 사용이 가능한 어떠한 활성화 함수를 써도 무방하다.


- b는 또 다른 모델 파라미터인 바이어스를 나타낸다.
- b에는 첨자 i나 j가 없다. 즉 b ∈ RK인 1차원 행렬(벡터)이다.
- 이렇게 합성곱 층의 값을 전방전파시켰다.

- 다음은 최대값 수집 층이다. 전파는 간단히 다음과 같이 나타낼 수 있다

- l1과 l2는 수집 필터의 크기며, s ∈ [0, l1-1], t ∈ [0, l2-1]이다.
- 일반적으로 l1과 l2는 2~4의 범위에서 같은 값으로 설정한다.

- 합성곱 층, 최대값 수집 층이라는 이 2개 층은 이 순서대로 배치시키는 경향이 있지만, 반드시 이를 따를 필요는 없다

- 커널의 가중치는 데이터로부터 학습되지만, 구조, 커널의 크기, 수집의 크기는 모두 파라미터들이다.
- 합성곱 층과 최대값 수집 층 다음에는 데이터를 분류하기 위한 간단한 MLP가 온다.
- 여기서 MLP는 1차원 데이터만 입력받으므로, 다운 샘플링된 데이터를 MLP의 입력층에 맞추기 위해 미리 평활화(flatten)할 필요가 있다.
- 특징 추출은 MLP 이전에 완료했으므로, 데이터 형식을 1차원으로 바꾸는 것은 어렵지 않다.
- 이와 같이 모델이 최적화되고 나면 CNN은 이미지 데이터를 분류할 수 있다.
- 이를 위해 다른 신경망들처럼 모델 학습을 위해 CNN에 역전파 알고리즘이 적용된다. (여기서는 MLP에 관한 식들은 취급하지 않겠다.)

- MLP의 입력층에서의 오차는 최대값 수집 층으로 역전파되며, 이번에는 모델 에 맞추기 위해 오차를 2차원으로 역평활화한다.
- 최대값 수집 층에는 모델 파라미터가 없으므로, 단순히 오차를 이전 층으로 역전파시키면 된다.

- E는 평가함수다.
- 이 오차는 합성곱 층으로 역전파되며,그 값을 가지고 가중치의 기울기와 바이어스를 계산할 수 있다.

- 역전파할 때 바이어스를 포함한 활성화가 합성곱 앞에 있으므로, 우선 바이어스의 기울기를 살펴보자

- 이 식으로 계속하기 위해 다음과 같이 델타를 정의한다.

- 그리고 다음을 정의한다

- 위 식들로부터 다음 식을 구할 수 있다.


- 같은 방법으로 가중치(커널)의 기울기를 구할 수 있다.


- 이와 같이 해서 모델 파라미터를 갱신할 수 있다.
- 단 한 개의 합성곱 층과 최대값 수집 층만 갖고 있다면 앞의 식들이면 된다.
- 그러나 다중 합성곱 층을 고려하면 합성곱 층의 오차도 계산해야 한다.
- 이것은 다음과 같이 나타낼 수 있다


- 여기서 다음 식을 얻는다

- 따라서 오차는 다음과 같이 나타낼 수 있다.


- 특징 지도를 사이에 아무것도 없을 때는 i-s < 0 혹은 j-t < 0 일 수 있으므로 앞의 식을 계산할 때 주의해야 한다.
- 이 문제를 풀기 위해 좌측상단 에지에 제로 매핑을 더해줘야 한다.
- 그러면 식은 양 축을 따라 뒤지빈 커널을 사용하는 합성곱이 된다.
- CNN의 식들이 복잡하게 보일 수도 있지만, 그저 각 파라미터의 합계를 쌓아 놓은 것뿐이다



5 자바 딥러닝 라이브러리 : DL4J, ND4J 등

처음부터 개발과 라이브러리(혹은 프레임워크)를 이용한 개발
- 처음부터 구현하는 것이 더 유연하기는 하지만, 동시에 알고리즘에 대한 튜닝과 유지 관리 또한 독자적으로 해야 한다는 단점이 있다.
- 다양한 프로그래밍 언어로 개발된 많은 라이브러리가 발표됐다.
* 딥러닝의 층 구조만 정의하면 모델을 학습시킬 수 있다. 파라미터 설정과 조정에만 집중하면 되며, 알고리즘에 대해서 신경쓸 필요가 없다.
* 대부분의 라이브러리가 오픈소스 프로젝트로서 대중에게 공개되어 있으며, 날마다 활발히 갱신되고 있다.
* 프로그램의 실행을 CPU에서 하거나 혹은 GPU에서 하거나 쉽게 전환할 수 있다.

- 라이브러리들을 이용하면 힘든 부분들을 건너 뛸 수 있고, 더 많은 시간을 데이터 마이닝 부분에 할애할 수 있다.
- 그러나 너무 많은 것을 라이브러리에 의존하는 것은 좋지 않다.
* 모델을 적용할 때 다른 방법과 조합을 하거나 아예 다른 방법을 사용하고자 하는 경우 이를 해결할 수 없게 될 위험성이 있다.
* 라이브러리가 지원하지 않는 알고리즘은 사용할 수 없다.
* 라이브러리가 어떻게 구현됐는가에 따라 실험에서 얻을 수 있는 정밀도가 달라진다.

DL4J와 ND4J의 소개



6 실무 응용을 위한 접근 방법: 순환 신경망 등

딥러닝이 활발한 분야
- 이미지 인식 : 딥러닝의 특징 추출 구조가 이미지 데이터에 잘 맞기 때문
- 자연어 처리(NLP) : n그램

순환신경망
- 데이터의 문맥을 망 안에 보관할 수 있는 신경망 모델들 중 하나가 딥러닝 알고리즘의 발전에 대해 활발히 연구하는 순환 신경망(RNN, Recurrent Neural Network)이다.
- 다음 그림은 간단한 RNN의 그래프 모델이다


- 표준 신경망과의 차이점은, RNN은 은닉층들 간에 시간에 의한 연결이 있다는 점이다.
- 시간 t에서의 입력은 시간 t의 은닉층에서 활성화되고, 은닉층에 보관되며, 그 다음에는 시간 t+1의 입력과 함께 시간 t+1의 은닉층으로 전파된다.
- 이것은 망의 과거 데이터의 상태를 포함하고 반영할 수 있게 한다.

- RNN이 오히려 동적 모델 같다고 생각할 수 있겠지만, 각 시간 단계별로 모델로 펼치면 RNN이 정적 모델이라는 것을 볼 수 있다


순환신경망
- 각 시간 단계에서 모델 구조는 일반 신경망과 동일하므로, 이 모델을 역전파 알고리즘으로 학습시킬 수 있다.
- 그러나 학습시킬 때 시간 관련성을 고려할 필요가 있으며, 이를 다루기 위한 기법이 시간적 역전파(BPTT, Back-Propagation Through Time)다.
- BTPP에서는 오차와 가중치와 기울기가 과거의 층으로 역전파된다.


- RNN은 모델 내에 문맥을 보관할 수 있다.
- 이론적으로는 각 시간 단계에서 망은 그때까지의 전체 시퀀스를 고려해야 하지만, 실무에서는 종종 계산을 덜 복잡하게 하고 기울기 소멸 문제와 기울기 폭발 문제를 방지하기 위해서 일정 길이의 시간 창구가 모델에 적용된다.
- BPTT의 적용으로 층 간 학습이 가능하게 됐으며, 이것이 RNN을 심층 신경망의 일종이라고 하는 이유다.
- 은닉층이 여러 개 있느 적층 RNN 같은 심층 RNN에 대한 알고리즘도 있다

- RNN은 NLP에 적응해 왔으며, 실제로 이 분야에서 가장 성공적인 모델 중의 하나이다.
- NLP에 최적화된 최초 모델은 순환 신경망 언어 모델(RNNLM)이라고 하며, 미콜로프에 의해 소개됐다.


- 망에는 3개의 층이 있는데, 입력층 x, 은닉층 s, 출력층 y다.
- 은닉층은 문맥층 혹은 상태층이라고도 한다.
- 시간 t에 대한 각 층의 값은 다음과 같이 나타낼 수 있다.

- f(∙)는 시그모이드 함수, g(∙)는 소프트맥스 함수를 나타낸다.

- 입력층이 시간 t-1의 상태층을포함하고 있으므로 망에 전체 문맥을 반영할 수 있다.
- 모델의 구조를 보면 RNNLM이 문맥의 길이가 N(그램)으로 제한되는 피드포워드 NNLM보다 문맥을 훨씬 더 넓게 볼 수 있다는 것을 알 수 있다.

- RNN을 학습시키는 동안 전체 시간과 전체 문맥이 고려돼야 한다.
- 그러나 앞에서 언급했듯이 BPTT는 계산양이 많고 긴 시간대에 걸치는 학습을 할 때, 가끔 기울기 실종/폭발 문제를 일으키므로 시간 길이를 잘라내기도 한다. (이 알고리즘을 생략 BPTT라고도 한다.)
- RNNLM을 시간에 대해 펼치면 모델은 다음과 같이 나타낸다. (아래 그림에서 펼친 시간 τ=3이다)

- di를 출력의 표지 벡터라고 하자.
- 그러면 출력에 대한 오차 벡터는 다음과 같이 나타낼 수 있다.


- 그러면 다음과 같은 식을 만들 수 있다


- 앞의 식은 은닉층 활성화 함수의 도함수이다.
- 여기서는 시그모이드 함수를 사용하므로 위의 식이 얻어진다.
- 그러면 과거의 오차에 대해 다음과 같은 식을 구할 수 있다.


- 이 식들을 가지고 모델의 가중치 매트릭스를 갱신할 수 있다.


- 여기서 α는 학습률이다.
- RNNLM에서 흥미로운 점은 매트릭스의 각 벡터가 학습 후의 단어들 사이의 차이를 나타낸다는 점이다.
- 이것은 U가 각 단어를 잠재 공간으로 매핑하는 매트릭스이므로, 학습 후에는 매핑된 단어 벡터들이 단어의 뜻을 포함하게 되기 때문이다.
- 예를 들어 ‘king’-‘man’+’woman’에 대한 벡터 계산은 ‘queen’이 될 것이다.

장단기 기억 망
- 표준 RNN을 학습시키는 데는 생략 BPTT가 필요하다.
- BPTT가 정말 전체 문맥을 반영하게 모델을 충분히 학습시킬 수 있을지에 의구심이 들 수 있지만, 정말로 그렇다.
- 이것이 장기 의존 문제를 풀기 위해 특별한 종류의 RNN인 장단기 기억(LSTM, Long Short Term Memory) 망이 도입된 이유다.
- 연결에 제한을 두어 기울기 폭발 문제를 완화할 수 있지만, 기울기 소멸 문제는 아직 더 깊이 생각해봐야 한다.
- 한 가지 가능한 접근 방법으로는 그 입력 값과 기울기 값을 영구히 저장하는 유닛을 도입하는 것이다.
- 따라서 표준 신경망의 은닉층에 있는 유닛은 단순히 다음과 같이 표현된다.


- 그런 후 아래쪽에 유닛을 더함으로써 비로서 망이 과거 정보를 뉴런에 저장할 수 있게 된다.
- 여기서 더해지는 유닛은 선형 활성화 값을 가지며, 흔히 1로 설정된다.
- 캐러셀(carousel) 장치처럼 오차가 뉴런에 머물며 사라지지 않기 때문에 이 뉴런 혹은 방(cell)을 CEC(constant error carousel)라고 한다.
- CEC는 보관함처럼 동작하며, 과거 입력을 보관한다.

- 이것이 기울기 소멸 문제를 해결해주기는 하지만 또 다른 문제를 야기한다.
- 전파되는 모든 데이터가 뉴런에 저장되므로, 혹시 있을 수 있는 노이즈 데이터도 저장하게 된다.


이 문제는 두 가지 문제, 입력 가중치 충돌(input weight conflic) 문제와 출력 가중치 충돌 문제로 나눌 수 있다.
- 입력 가중치 충돌 문제의 핵심 개념은 어떤 정보를 필요하게 될 때까지 망 안에 보관해 둔다는 것인데, 뉴런은 관련 정보가 올 때에만 활성화되고, 그렇지 않으면 활성화되지 않게 된다.
- 유사하게 출력 가중치 충돌 문제도 모든 종류의 신경망에서 발생할 수 있다.
- 뉴런의 값은 필요한 경우에만 전파되고, 그렇지 않으면 전파되지 않은다.
- 뉴런들 사이의 연결을 망의 가중치로 표현하는 한 이 문제들을 해결할 수 없다.
- 따라서 입력과 출력의 전파를 조절하는 다른 표현 기법이나 방법이 요구된다.

- 이것을 어떻게 할 수 있을 것인가?
- 답은 CEC 앞과 뒤에 ‘게이트’ 같은 기능을 하는 유닛을 두는 것이다.
- 이것들을 각각 입력 게이트, 출력 게이트라고 한다.
- 게이트에 대한 그래프 모델은 다음과 같이 나타낼 수 있다.


- 게이트가 닫히면 0이고 열리면 1로 정의하면 게이트는 입력에 대응해 이산 값 0이나 1을 내보내야 이상적인데, 프로그램적으로는 BPTT로 잘 학습되게 하기 위해 게이트가 0과 1 사이의 값을 내보내게 설정된다.

- 이제 정확한 시간에 정확한 정보를 넣었다 꺼냈다 할 수 있을 것 같지만, 아직 다른 문제가 남아 있다.
- 입력 게이트와 출력 게이트, 이 두 개의 게이트 만으로는 CEC에 저장된 기억을 몇 단계 정도만을 쉽게 갱신할 수 없다.
- 따라서 CEC의 값을 동적으로 변경할 수 있는 추가 게이트가 필요하다.
- 이를 위해 기억을 지울 때를 통제하는 망각 게이트를 추가한다.
- 이 게이트의 값이 0 혹은 0에 가까우면 CEC에 보관된 값은 새 기억으로 덮어써지게 된다.
- 이 3가지의 게이트로 유닛에서 과거의 정보나 문맥을 기억할 수 있으며, 그래서 이것을 LSTM 블록 또는 뉴런이 한 개 이상인 블록이라는 뜻에서 LSTM 메모리 블록이라고 한다.

- 다음 그림은 LSTM 블록을 나타낸 것이다

- 각 게이트는 LSTM의 모든 유닛의 입력 유닛과 출력 유닛으로부터 연결을 갖고 있지만, CEC로부터의 직접 연결은 없다.
- 이것은 한 블록의 출력이 게이트의 출력에 너무 많이 종속적이어서 망의 실제 은닉 상태를 볼 수 없음을 의미한다.
- 즉, 출력 게이트가 닫혀있는 한 어떤 게이트도 CEC에 접근할 수 없으며, 그 게이트에는 핵심적인 정보가 빠져 있게 되며, 이것이 LSTM의 성능을 떨어뜨릴 수도 있다.

- 한 가지 단순하지만 효과적인 해법은 CEC에서 블록 내의 게이트들로 연결을 두는 것이다.
- 이것을 핍홀 연결(peephole connection)이라고 하며, 게이트들로부터 핍홀 연결로 오차가 역전파되지 않는다는 것만 예외로 하면 일반적인 가중치 연결과 동일한 작용을 한다.
- 핍홀 연결은 모든 출력 게이트가 닫혀 있을 때에도 모든 게이트에서 은닉 상태를 알 수 있게 만든다.
- 지금까지 많은 용어들을 배웠지만 결과적으로 전체 연결에 대한 기본적인 구조는 다음 그림과 같다


- 입력 시퀀스 x = (x, …, xT)가 주어지면 망의 각 유닛은 다음과 같이 계산할 수 있다

- Wix는 입력 게이트에서 입력으로의 가중치 매트릭스며, Wfx는 망각 게이트에서 입력으로, Wox는 출력 게이트에서 입력으로의 가중치 매트릭스다.
- Wcx는 셀에서 입력으로이 가중치 매트릭스며, Wcm은 셀에서 LSTM 출력으로, Wym은 출력에서 LSTM 출력으로의 가중치 매트릭스다.
- Wic, Wfc, Woc는 각각 핍홀 연결에 대한 대각형(diagonal) 가중치 매트릭스다.
- b로 표시되는 항들은 바이어스 벡터들이며, bi는 입력 게이트 바이어스 벡터, bf는 망각 게이트 바이어스 벡터, bo는 출력게이트 바이어스 벡터, bc는 CEC 셀 바이어스 벡터, by는 출력 바이어스 벡터다.
- 여기서 g와 h는 각각 셀 입력과 셀 출력의 활성화 함수다.
- σ는 시그모이드 함수를 나타내며, s(∙)은 소프트맥스 함수를 나타낸다. ⊙는 벡터 간 원소별 곱셈을 나타낸다

딥러닝의 문제
- 딥러닝은 이미지 인식 분야에서 이미 인간보다 높은 정밀도를 보이고 있으며, 많은 실재 애플리케이션에 적용됐다.
- 놀랍게도 딥러닝이 성공적으로 활용되고 있는 분야는 아직 별로 없다.
- 이것은 딥러닝이 과거 알고리즘에 비해 정말 혁신적이며 분명이 인공지능의 실체화에 성큼 다가서게 했지만, 실제 응용에 널리 사용되기에는 몇 가지 문제를 지니고 있다.

첫 번째 문제로, 딥러닝 알고리즘에는 모델 파라미터가 너무 많다는 것이다.
- 딥러닝에는 미리 결정해야 할 하이퍼 파라미터가 많다. (높은 정밀도 - 더 많은 시행착오, 은닉층의 수, 각 은닉층의 유닛 수 등, 학습률)
- SDA의 오염 수준, CNN의 커널의 크기 등 각 알고리즘 별로 독특한 파라미터들은 더 많은 시행착오를 요구한다.
- 이와 같이 딥러닝의 뛰어난성능의 뒤에는 꾸준한 파라미터 튜닝이 있다.
- 딥러닝은 마법이 아니다.
- 최적화 측면에서는 데이터의 양도 중요하다. 이것은 심층 신경망은 매 학습에 많은 시간이 걸린다는 것을 의미한다.

- 요약하면 딥러닝은 다음과 같은 조건하에서 가치를 발휘한다.
* 무슨 특징으로 분류할 수 있는지를 인간이 생각할 수 없을 만큼 복잡하고 어려운 문제
* 심층 신경망을 적절히 최적화할 수 있을 만큼 충분한 양의 데이터

- 물론 어느 분야에서나 정밀도는 높을수록 더 좋지만, 실문적으로는 높은 정밀도와 필요한 계산 시간은 상호 타협 관계에 있다.

- 그 외에도 딥러닝 알고리즘은 완벽하지 않으며, 모델 자체에 대해서도 아직 개선해야 할 것들이 많다.

딥러닝의 가능성과 능력을 최대화하기 위한 접근 방법
* 분야 지향 접근법 : 이미 충분히 연구됐고 뛰어난 성능을 보여줄 딥러닝 알고리즘이나 모델을 활요하는 것, 의료, 자동차, 광고 기술, 전문직 혹은 실무(의사, 변호사, 변리사, 회계사 등), 스포츠
* 세분화 지향 접근법 : 딥러닝을 적용할 수 있을 것으로 보이는 대상 문제를 딥러닝이 잘 적용될 수 있는 다른 문제로 교체하는 것
* 출력 지향 접근법 : 딥러닝을 이용해 출력을 표현할 새로운 방법을 탐구하는 것.



7 기타 중요한 딥러닝 라이브러리

테아노 (deeplearning.net/software/theano)
텐서플로우 (www.tensorflow.org)
카페 (caffe.berkeleyvision.org)



8 그 다음은 무엇일까?

딥러닝에 대한 긴급 뉴스 : 알파고와 이세돌의 대결
* 체스 10120
* 일본장기 10220
* 바둑 10360

- 테이 (MicroSoft 2016. 3/23, www.tai.ai)
딥러닝은 학습에 의해 얻은 지식 범위 내에서만 사물을 판단할 수 있다.

딥러닝에 대한 최신 소식을 볼 수 있는 곳
- GitXiv : gitxiv.com
- 딥러닝 뉴스 : news.startup.ml