'deeplearning'에 해당되는 글 4건

  1. 2017/11/10 용비 08. Logistic Regression
  2. 2017/11/10 용비 07. Activation Functions
  3. 2017/11/10 용비 06. Example : Feedforward Networks - Gradient Descent
  4. 2017/05/11 용비 03. Neural Network Elements
Logistic Regression

(로지스틱 회귀 : 독립변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용디는 통계 기법, 확률 모델. 로지스틱 회귀의 목적은 일반적인 회귀 분석의 목표와 동일하게 종속 변수와 독립 변수간의 관계를 구체적인 함수로 나타내어 향후 예측 모델에 사용하는 것이다.)

많은 레이어를 가진 심층 신경 네트워크(deep neural network)에서 마지막 레이어는 특별한 역할을 갖는다. 레이블이 지정된 입력을 처리할 때, 마지막 출력 레이어는 가장 가능성 있는 레이블을 적용하여 각 예제를 분류한다. 출력 레이어의 각 노드는 하나의 레이블을 나타내고, 노드는 이전 레이어의 입력과 파라미터로부터 수신한 신호의 강도에 따라 켜지거나 꺼진다.

각 출력 노드는 입력 변수가 레이블을 가질 가지가 있거나 없기 때문에 이진 출력값 0과 1의 2개의 가능한 결과를 생성한다. 어쨌든, 약간의 잉태같은 것은 없다.

레이블이 지정된 데이터로 작업하는 신경망(neural network)은 2진 출력을 생성하지만, 신경망이 받는 입력은 종종 연속적이다. 즉, 네트워크가 입력으로 수신하는 신호는 값들의 범위에 걸쳐 이어져 있고 해결하고자 하는 문제에 따라 많은 수의 메트릭(기준)을 포함하고 있다.

예를 들어, 추천 엔진은 광고를 게재할 것인지 아닌지에 대해 2진 결정을 내려야만 한다. 그러나, 그 결정의 기반이 되는 입력은 지난 주 얼마나 많은 고객이 Amazon에서 시간을 보냈는지, 혹은 고객이 해당 사이트를 얼마나 자주 방문했는지를 포함하고 있다.

따라서 출력 레이어는 기저귀에 67.59달러를 썼고, 웹 사이트에 15회 방문했다는 것과 같은 신호를 0과 1 사이에서 압축을 해야만 한다. 즉, 주어진 입력이 레이블이 붙여져야 하는지 아닌지의 확률을 계산해야 한다.

지속적인 신호를 이진 출력으로 변환하는데 사용하는 메커니즘을 로지스틱 회귀라고 한다. 불행하게도 로지스틱 회귀라는 이름은 대부분의 사람들이 친숙한 선형 의미에서의 회귀 분석보다는 분류를 위해 사용된다. 입력값들의 집합이 레이블에 일치할 확률을 계산한다.

사용자 삽입 이미지






이 작은 수식을 살펴보자.

확률로 표시되는 연속되는 입력의 경우, 음의 확률같은 것이 없기 때문에 양의 결과를 출력해야만 한다. 그래서 출력이 0보다 커야 하기 때문에 분모는 e의 지수가 된다. 이제 e의 지수와 분수 1/1 사이의 관계를 고려해 보자. 알다시피 1은 확률의 결과가 터무니없지 않고는 넘어갈 수 없는 한도이다. (120%로 확신한다.)

레이블을 작동시키는 입력값 x가 증가함에 따라 x에 대한 e의 표현은 0으로 줄어들어서 분수 1/1이나 100%로 남게 된다. 이것은 (언제고 상당히 접근하는 것이 아니라) 레이블에 적용되는 절대 확실성에 도달함을 의미한다. 출력과 음의 상관관계가 있는 입력은 e의 지수에 음수 부호로 뒤집힌 값을 가지게 되고, 음수 신호가 커지면 x에 대한 e의 양이 커져서 전체 분수는 0에 가까워지게 된다.

이제 x를 지수로 갖는 것보다 모든 가중치와 해당 입력값들의 곱을 합한 것, 즉 네트워크를 통과하는 모든 신호를 상상해 보자. 그것이 신경망 분류기(neural network classfier)의 출력 레이어에서 로지스틱 회귀 레이어로 반영되는 것이다.

이 레이어를 사용하면, 위에는 예를 1로 레이블을 지정하고, 아래에는 표시하지 않는 임계값을 결정하여 설정할 수 있다. 원하는 대로 임계값을 다르게 설정할 수 있다. 오류를 어느 쪽에 적용할 것인지에 따라 낮은 임계값은 거짓 양성(false positive:통계상 실제로는 음성인데 검사 결과는 양성이라고 나오는 것, 위양성 혹은 거짓 정보)을 증기시키고, 높은 임계값은 거짓 음성(false negative:통계상 실제로는 양성인데 검사 결과는 음성이라고 나오는 것. 2종 오류. 거짓 양성보다 오탐 비용이 커짐.)을 증가시킨다.


받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/793

Activation Functions
(활성화 함수 or 출력 함수(transfer functions))

활성화 함수는 노드에서 입력값에 기반하여 어떤 출력값을 생성할지를 결정한다. Sigmoid 활성화 함수가 가장 대중적이며, ReLU가 현재 가장 많이 사용되고 있다. DeepLearning4J에서 활성화 함수는 layer level에 설정되고, 해당 레이어의 모든 뉴런들에 적용된다.

지원되는 활성화 함수는 다음과 같다.
- CUBE
- ELU
- HARDSIGMOID
- HARDTANH
- IDENTITY
- LEAKYRELU
- RATIONALTANH
- RELU
- RRELU
- SIGMOID
- SOFTMAX
- SOFTPLUS
- SOFTSIGN
- TANH

다음과 같이 활성화 함수를 설정할 수 있다.

layer(2, new OutputLayer.Builder(LossFunctions.LossFunction.NEGATIVELOGLIKELIHOOD).activation(Activation.SOFTMAX)

Custom layers, activation functions and loss functions

Deeplearning4j 는 Custom Layer, 활성화 함수(activation functions), 손실 함수(loss functions)를 지원한다.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/792

Gradient Descent (기울기 하강)

오류가 발생하는 경우에 따라 가중치를 조정하는 데 일반적으로 사용되는 최적화 함수를 "기울기 하강"이라고 부른다.

기울기는 "slope(경사)"의 다른 말이며, 특정 기간 동안 늘어난 비율, 시간 변화에 따른 자금의 변화 등과 같이 일반적인 x-y 그래프의 형태에서는 2개의 변수가 서로 어떻게 연관되어 있는지를 나타낸다. 이와 같이 특별한 경우에, 기울기는 네트워크의 오류와 단일 가중치 사이의 관계를 설명하기도 한다. 예를 들면, 가중치가 조정됨에 따라 오류가 어떻게 변화되는지를 설명할 수 있다.

더 좋은 점을 찍기 위해서, 어느 가중치가 가장 적은 오류를 만드는가? 어느 것이 입력 데이터에 포함되어 있는 신호를 정확하게 설명하고, 올바른 Classification(분류)로 변환하는가? 어느 것이 입력 이미지에서 "코"를 듣고, 프라이팬이 아닌 얼굴로 표시되어야 함을 알 수 있는가?

신경 네트워크(Neural Network)는 학습할 때, 천천히 많은 가중치를 조정하여 신호를 의미하는 바에 정확하게 맵핑할 수 있다. 네트워크 오류와 그 각각의 가중치 사이의 관계는 가중치의 미세한 변화가 오류의 미세한 변화를 야기시키는 정도를 측정하는 미분값(dE/dw)이다.

각 가중치는 많은 변형을 내포하고 있는 심층 네트워크(deep network)의 한가지 요소일 뿐이다. 가중치의 신호는 활성화를 거쳐서 여러 레이어로 합쳐진다. 따라서 미적분학의 Chain Rule(연쇄법칙)을 사용하여 네트워크의 활성화와 출력값들을 되짚어 계산하고, 결과적으로 문제에 맞는 가중치와 전체적인 오류에 대한 관계에 도달한다.

미적분학에서 Chain Rule(연쇄법칙)은 다음과 같다.

사용자 삽입 이미지




전방향 네트워크에서, 네트워크의 오류와 단일 가중치 사이의 관계는 다음과 같이 보일 것이다.

사용자 삽입 이미지






즉, 어느 가중치가 전달되느냐에 따라 세번째 변수(활성화:activation)에 의해 영향을 받는 두 변수(오류:Error, 가중치:weight)가 주어지면 활성화의 변화가 오류에 얼마나 영향을 미치는지를 먼저 계산하여 가중치의 변화가 오류의 변화에 얼마나 영향을 미치는지를 계산할 수 있고, 가중치의 변화가 활성화의 변화에 얼마나 영향을 미치는지를 계산할 수 있다.

Deep Learning에서 학습의 본질은 더 이상 오류를 줄일 수 없을 때까지 오류를 만들어내는 응답에 있는 모델의 가중치를 조절하는 것에 불과하다.

Updaters
(Model의 weight(parameter)를 update할 때 사용하는 Gradient Descent 방법의 알고리즘)

DL4J에서는 다음과 같은 Updater를 지원한다.
- ADADELTA
- ADAGRAD
- ADAM
- NESTEROVS
- NONE
- RMSPROP
- SGD
- CONJUGATE GRADIENT
- HESSIAN FREE
- LBFGS
- LINE GRADIENT DESCENT

Updaters에 대한 JavaDoc는 DeepLearning4J JavaDoc의 일부로 https://deeplearning4j.org/doc/org/deeplearning4j/nn/conf/Updater.html 에서 이용할 수 있다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/791


Neural Network Elements
(신경망 요소들)

Deep Learning은 "스택화된 신경 네트워크"(stacked neural network)에 사용하는 이름이다. 곧, 여러 개의 계층(layer)으로 이루어진 네트워크이다.

계층(layer)들은 노드(node)들로 구성되어 있다. 노드(node)는 충분한 자극에 접했을 때 작동하는 인간의 뇌 신경 세포를 막연히 본따서 만들어진, 단지 계산이 일어나는 장소일 뿐이다. 노드는 데이터 입력값과 일련의 계수나 가중치를 조합하여 입력값을 증폭하거나 감쇠하기 때문에 학습을 시도하는 작업 알고리즘에 입력값을 할당하는 것이 중요하다. (예를 들면, 오류 없이 데이터 분류하는데 가장 도움이 되는 입력값은 무엇인가?) 이렇게 가중치가 적용된 입력값들이 합해지고, 그 합은 소위 Activation Function(활성화 함수)라고 불리는 노드를 통과하게 된다. 그리하여 신호가 최종 결과, 즉, 분류 활동에 영향을 주기 위해 네트워크를 통과하여 무엇을 확대하는지 결정하게 된다.

하나의 노드가 어떻게 동작하는지에 대한 다이어그램이 있다.


사용자 삽입 이미지

노드 계층(node layer)은 입력값이 네트워크를 통해 공급되는 경우, 켜고 꺼지는 뉴런과 같은 스위치의 행이다. 데이터를 받은 초기 입력 계층으로부터 시작하여, 각 계층의 출력값은 동시에 그 다음 계층의 입력값이 된다.

사용자 삽입 이미지

입력값의 특성과 조정할 수 있는 가중치의 조합은 네트워크가 입력값을 분류하고 클러스터링하는데 고려하는 특성에 중요도를 지정하는 방법이다.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/788