Programmer Application Note

2017년 8월 10일 목요일

2017년 8월 2일 수요일

합성곱 신경망(convolutional neural network)

오후 5:55 Posted by PAN.SPOT , , No comments
1. CNN 신경망이란
   - 합성곱계층 과 폴링계층이 추가된 신경망 구조를 가지며, 3차원 데이터 같이 입체적인 데이터가 흐른다.  이미지를 예로 들면 가로,세로,채널(색상)으로 구성된 3차원 데이터 인데 이전까지의 완전연결 계층에서는 3차원 데이터를 평평한 1차원 데이터로 바꾸어 입력 하였지만 CNN에서는 3차원 형상정보를 그대로 입력하여 3차원에 담겨있는 정보를 같이 비교 하게 된다. CNN에서는 입출력 데이터를 입력,출력 특징맵 (feature map)이라고 한다.



2. 합성곱(Convolutional)
   - 합성곱 연산은 입력데이터에 필터(커널)를 적용하는데 필터는 (높이,너비) 형태로 표현되며 아래와 같이 세로,가로 (4,4)의 입력 데이터가 입력 될 때 필터(3,3)의 합성곱은 (2,2) 가된다. 필터의 윈도우를 일정간격(stride) 만큼 이동 시켜  단일 곱셈-누산(FMA) 방식으로 계산한다. 각 원소를 곱하고 그값들을 모두 더한다. 이때도 바이어스(편항)도 존재한다.


3. 패딩(padding)
   - 입력 데이터 주변에 특정값(if 0)을 채우는것을 패딩이라 하며 이렇게 하였을 때 출력값의 크기를 조정 할 수 있다. 즉 (4,4)크기의 입력 데이터에 패딩을 1 추가 하면 (6,6) 데이터가 되고 이때 출력은 (4,4)로 바뀐다.


4. 스트라이드(stride)
   - 필터의 윈도우의 이동 하는 값을 나타낸다.


5. 입력 크기 (H,W),필터크기(FH,FW),패딩(P), 스트라이드(S)에 따른 출력크기(OH,OW)계산


6. 합성곱 연산의 형상
   - 채널을 추가한 실제 입력 데이터 처리 관계 즉 채널(색상)이 여러개인 있는 이미지를 합성곱 연산에 넣으면 1개의 채널을 가진 데이터가 출력 데이터가 된다.

  - 이때 필터를 여러개 적용 한다면 출력데이터도 여러개의 채널로 출력 될 수 있기 때문에 CNN에서는 필터가 4차원 데이터 이며 (출력 채널 수 , 입력 채널 수 ,높이 ,너비)로 적용 한다.



   - 배치 처리된 입력 데이터가 들어 왔을 때는 아래와 같이 계산된다. 입력데이터는 (데이터 갯수,채널,높이,너비) 순으로 형상이 이루어 진다.



7. 풀링(Pooling)
   - 풀링은 세로 가로 방향의 공간을 줄이는 연산으로 최대 풀링(max pooling)을 많이 사용하며, 예를 들어 2x2 최대 풀링이라면 2x2 영역에서 최대값의 원소 하나로 집약 하여 출력 한다. 이때 스트라이트 또한 2로 한다. 3x3 이면 스트라이트도 3이다.

8. im2col
   합성곱 연산 시 im2col 함수를 사용하여 4차원 데이터를 2차원 행렬로 반환해주는데 이렇게 하면 합성곱 연산이 보다 간결 해진다.

밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어


신경망 학습 개선 방법

오전 1:17 Posted by PAN.SPOT , , No comments
1. 에폭 (epoch)
   1에폭은 학습에서 훈련데이터를 모두 소진 했을 때의 횟수에 해당 한다. 훈련데이터가 6만개 있다면 미니배치로 100개씩 배치 하였을 때 경사하강법으로 600회 반복하면 100 * 600 = 6만개 가되어 1에폭이 된다.

2. Affine(어파인) 계층
   신경망의 순전파 때 수행하는 행렬의 내적을 어파인 변환이라 한다. 행렬의 내적을 수행하는 계층을 이르는말

2. 최적화 방법(매개변수 갱신법)
   - SGD(확률적 경사 하강법) : 일반적으로 사용되나 비등방성함수(방향에 따라 기울기가 달라지는 함수)에서는 비효율 적이다.
   - 모멘텀(Momentum) : SGD에서 움직임에 대한 변수까지 추가하여 개선한 방법
   - AdaGrad : 학습률을 처음엔 크게 했다가 점차 줄여나가는 방법  (과거의 기울기를 제곱하여 계속 더해 나가는 기법으로 학습강도가 점차 줄어들다가 0이 되는 문제가 있다 이를 개선한 RMSProp 라는 방법도 있다)
   - Adam : 모멘텀과 AdaGrad 방법을 융합 한다는 생각을 기초로 만든 기법 - 최근들어 많이 사용 하는방법

3. 가중치 초기화
   - xavier(재비어) : n = 입력 노드의 수 1 / sqrt(n) 의 표준편차를 가지는 정규화 분포
   - he : ReLU 활성화 함수를 사용 할때 초기화 값으로 많이 사용된다.

4. 배치정규화
   - 각 층의 활성화 값의 분포를 적당히 분포 되도록 조정하는 기법으로 아래와 같은 장점이 있다.
    1. 학습 속도 개선 2. 초깃값에 의존하지 않는다. 3. 오버피팅을 억제한다.
 









5.오버피팅 억제 방법
  - 가중치감소 : L2법칙 에 따라 가중치가 커지는 것을 억제하여 오버피팅이 발생하는 것을 억제한다.
  - 드롭아웃(Dropout) : 신경망 모델이 복잡해싲면서 가중치 감소 만으로 대응이 어려워질때 사용하는 기법으로 훈련 때 은닉층의 노드를 무작위로 골라 삭제 하는 방법이다.

6. 하이퍼 파라미터 최적화
   하이퍼 파라미터란 노드의 수 , 배치의 크기 , 학습률 등 초기에 설장하는 값들을 말한다.
   - 데이터를 훈련데이터,검증데이터,시험데이터로 나눈다.
   - 훈련데이터에서 20% 비율로 검증데이터를 분리한다.
   - 검증테이터는 하이퍼파라미터 성능 평가용으로 사용한다. 이를 분리한 이유는 시험데이터로 하이퍼파라미터를 조정 하면 하이퍼파라미터 값이 시험데이터에 오버피팅 될 수 있기 때문이다.


참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어








2017년 7월 26일 수요일

신경망의 학습과정

오후 6:57 Posted by PAN.SPOT , , No comments

1. 신경망의 학습
   신경망의 학습이란 학습데이터를 가지고 신경망의 가중치 와 바이어스를 업데이트 하여 오차를 줄이고 원하는 결과값을 얻을 수 있도록 하는 기법이다.

2. 오차의 역전파
    신경망의 학습 과정을 통해 입력데이터에 대한 결과를 가지고 정답과 비교한 오차를 출력층 -> 은닉층으로 순전파의 반대 방향으로 가중치를 업데이트 해 나가는 방법을 말한다.

3. 손실함수(비용함수,오차함수)
   여러 이론책에 다양하게 표현되나 같은 뜻을 가지고 있다.  신경망의 성능을 나타내고자 하는 지표로 신경망의 역전파 과정에 사용 된다.
   손실함수로는 평균 제곱 오차(MSE) 와 교차 엔트로피 오차(cross entropy,CEE) 함수가 가장 많이 사용 된다.  교차 엔트로피 함수는 오차가 커질 수록 비용이 급격하게 증가한다.

4. 원-핫 인코딩
   학습과정에서 정답을 표기할 때 원-핫 인코딩 방식을 사용 하는데  한노드만 1로 출력 하고 나머지는 0으로 출력하여 정답인 노드를 1로 출력 하는 분류 모델에서 사용 방식 이다.

5. 가중치 값을 갱신하는 방법
   경사하강법 (DG) : 100개의 학습 데이터가 있다면 가중치값이 100번 갱신된다.
   배치  : 모든 학습 데이터의 하나로 묶어 가중치를 한번만 갱신 할 수있도록 하는 기법
   미니 배치 : DG와 배치방식을 섞어 놓은 개념으로 전체 학습 데이터 중 일부 데이터만 골라서 배치 하는 방법
  딥러닝에 많이 사용되는 방법은 미니 배치 방식 이다.

6. 경사하강법에서의 가중치와바이어스 갱신 방법
   경사 하강법이란 손실함수 즉 결과가 오차가 주어지는 함수 에서 최솟값을 찾아가는 과정이라고 할 수 있다. 이 때 기울기를 이용하는데 손실 함수에서 기울기가 최소화 되는 값을 향해 조금씩 가중치와바이어스를 갱신 한다. 이때 기울기는 손실 함수를 미분하여 얻을 수 있다.
   딥러닝 분야에서는 확률적 경사 하강법(SDG) 확률적으로 무작위로 골라낸 데이터에 대해 수행 하는 경사하강법을 이용한다.


7. 학습률 (learning rate)
   학습률은 미분한 손실함수의 값에서 일정 값을 곱하여 가중치와 바이어스의 갱신률을 조정 하는데 사용되어 진다.



참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어

신경망의 추론과정

오전 1:01 Posted by PAN.SPOT , , No comments
1. 신경망의 순전파
   입력층에서 들어오는 데이터는 각각의 가충지를 곱하고 바이어스를 더하여 은닉층의 노드로 전달되며, 전달된 값은 활성함수를 통해 출력된다. 이를 수치로 나타내면 다음과 같다.
  가중합 : v = w1x2 + w2x2 + .... + b (바이어스)  = wx + b
  출력 :  y = φ(v) = φ(wx + b)      φ = 활성함수



2. 활성함수
    뇌의 뉴런은 입력값이 바로 다른 뉴런으로 전달 되지 않고 어느 분계값에 도달 해야지만 출력값을 생성한다. 입력 신호를 받아 특정 분계점을 넘어서는 경우 출력 신호를 생성 해주는 함수는 활성 함수라 한다. 가장 간단하는 계단 함수가 있으며 계단 함수보다 훨씬 부드러운 S자 형태를 가지는 시그모이드 함수가 활성 함수로 많이 사용되며 출력이 (0~1)로 제한된다. 현시점에서는 시그모이드 함수보다 ReLU 함수가  현업에서 많이 사용된다.




3. 출력층에서의 활성함수
  일반적으로 출력층의 활성함수는 다르게 사용되는데 회귀문제는 항등함수(그대로 출력) 이진분류에서는 시그모이드 함수 다범주분류에서는 소프트맥스 함수를 사용 하는 것이 일반적이며, 소프트맥스 함수의 경우 출력값의 총합이 1인 함수로 출력값의 확률을 계산할때 용이 하다. 다만 지수 계산이 필요하므로 학습에서만 사용되며, 추론 과정에서는 비용이 많이 들지 않는 활성 함수를 사용하는 경우가 많다.

4. 행렬을 이용한 가중합 계산 방법
   신경망 관련서적에는 행렬로 계산 되는 다양한 방법들이 있는데 대중적으로 많이 쓰이는 방법을 사용 하도록 한다.
   
일반적으로 행렬을 표기 할 때 전치행렬 성질을 이용하여 신경망의 좌측 입력 부분을 행렬의 뒤에 연산 한다. 그러므로 입력값은 1차원 벡터를 2차원의 행렬로 변환 후 전치행렬을 이용하여 행과 열을 서로 바꿔야 한다.
전치행렬 성질 : (XW)^T = W^TX^T

5. 배치처리
   일반적으로 입력데이터를 하나씩 계산 하는것 보다 한꺼번에 많은 데이터를 하나로 묶어서 처리하는것이 속도면에서 훨씬 빠르다. 컴퓨터의 수치 계사는 큰 배열을 효율적으로 처리 할 수 있으며 데이터를 읽는 횟수를 줄여 속도를 향상 시킬 수 있다. 이를 행렬로 보면 아래와 같이 가능 하다.
 
해당 행렬은 784개(28x28)의 픽셀가진 이미지를 100장씩 묶어 처리를 하면 출력층의 노드가 10개일 때 100X10의 행렬로 출력 된다.



참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어


신경망이란

오전 12:59 Posted by PAN.SPOT , , No comments
1. 신경망
   머신러닝의 모델 중 하나 이며, 실제 뇌의 뉴런들의 연결을 본따서 만든 것으로
실제뇌는 정보를 저장하는 공간이 따로 없기 때문에 신경세포는 다른 신경 세포에서 오는 신호를 받아 자신의 신호를 내보내는 역할만 하고 이런 신경 세포들의 연결 된 네트워크이며, 신경 세포들의 연결 상태가 바로 뇌에 저장된 정보를 나타낸다.
신경세포 = 노드 , 신경세포들의 연결 = 연결 가중치

2. 신경망의 종류
   그림과 같이 단층 신경망과 다층 신경망이 있으며 , 신경망 성능 향상을 위해서는 다층 신경망을 이용한다. 다만 연산속도등을 고려해서 신경망을 설계한다. 최든 현업에서 사용되는 신경망은 대부분 심층 신경망을 사용한다. 신경망은 크게 입력층,은닉층,출력층으로 나뉜다.


3. 단층 신경망의 한계
   단층 신경망의 경우 XOR 같은 선형 함수로 분리 되지 않는 문제에서는 사용 할 수 없다.




참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어
밑바닥부터 시작하는 딥러닝 - 파이썬으로 익히는 딥러닝 이론과구현 / 사이토고키 | 한빛미디어
신경망첫걸음 - 수포자도 이해하는 신경망 동작 원리와 딥러닝 기초 / 타리크라시드 | 한빛 미디어


 





2017년 7월 25일 화요일

머신러닝이란

오후 11:04 Posted by PAN.SPOT , No comments

1. 인공지능 머신러닝 딥러닝의 관계
    인공지능 > 머신러닝 > 딥러닝
    딥러닝은 머신러닝의 일종이고 머신러닝은 인공지능의 일종이다.

2. 머신러닝이란
   데이터를 이용한 모델링 기법으로 기계가 학습 데이터를 이용 하여 데이터를 분석 해서 모델을 스스로 찾아내는 것이다.

3. 학습(classification)과 추론(inference)
   학습이란 데이터와 데이터에 대한 결과값으로 최적의 모델(신경망)을 찾아가는 과정을 말한다.
   추론이란 이렇게 학습된 모델(신경망)에 입력 데이터를 넣어 결과를 예측하는것을 말한다.

4. 일반화(generalization)
   학습데이터와 입력데이터가 달라지더라도 성능의 차이가 나지 않게 하는 것을 말한다.

5. 과적합(overfitting)
   그림에서 처럼 모델(곡선)이 동그라미와 세모를 분류 과정 중에 상대 진형으로 깊숙히 침투한 잡음 섞인 데이터 까지 모두 고려하여 만들다 보니 일반화 성능이 떨어지는 현상을 말한다. 훈련데이터가 작고 심층신경망으로 갈수록 더 잘 발생한다.


6. 과적합에 대처하는 정칙화(regularization)와 검증(validation)
   정칙화는 모델의 형태를 최대한 간단히 만들려는 수치해석적인 기법 모델의 성능을 약간 희생 하더라도 모델이 과적합에 빠지지 않게 하려는 의도이다.
   검증은 일반적으로 입력데이터의 차원이 높기 때문에 과적합 여부를 쉽게 판단하기 힘들다 그래서 학습 데이터의 일부를 떼어 내어서 이를 성능 검증용으로 사용하는 기법을 말한다.

7. 지도학습,비지도학습,강화학습
   지도학습이란 입력과 정답을 주어서 학습하는 방법
   비지도학습이란 입력만 주어서 문제의 형태나 유형을 나누는 학습
   강화학습이란 입력과 출력 출력에 대한 평가점수를 주어서 상호작용의 최적화을 위한 학습

8. 분류(classification)와 회귀(regression)
   분류는 입력 데이터를 보고 어느 한 범주에 속하는지 보는 모델
   예를 들면 자동차와 비행기가 입력 데이터로 주어졌을 때 자동차와비행기를 분류해서 결과값으로 출력하는 모델
   회귀란 유적학적으로 개개인의 정보가 부모의 유전종보로 수렴하는 경향이 있다는 뜻으로 정답이 분류와 다르게 값으로 나온다.
   예를 들면 사람 사진으로 보고 몸무게가 얼마인지 추론 하는 모델

9. 군집화(clustering)
   비지도학습에서 나오는 개념으로 데이터의 특성을 분석해서 관련 있는 데이터들 끼리 묵는 것을 말한다.



참고:
딥러닝첫걸음 - 머신러닝에서 컨벌루션 신경망까지 / 김성필 | 한빛미디어