합성곱 신경망 (Convolutional Neural Network, CNN)

: CNN은 이미지, 동영상 등을 분석하는데 사용하는 알고리즘입니다. 

 

 

완전연결 계층의 문제점

 

- 기존에 구현했던 완전 계측, 즉 기존 신경망은 데이터의 형상이 무시됩니다. 

글자의 크기가 달라지거나 글자의 회전이 생기면 글자에 변형과 같이 글자에 변형이 조금만 생기더라도 다른 글자로 인식하기 때문에 새로운 학습 데이터를 넣어주지 않으면 좋은 결과 얻을 수 없습니다(패턴을 읽지 못하므로 인식을 위해 다양한 데이터 필요)  

 

- 입력 데이터가 이미지인 경우, 이미지는 3차원(가로, 세로, 채널(색상))으로 구성된 데이터이나 1차원으로 평탄화해줘야 합니다.  



합성곱 계층의 특징


- 원본 이미지를 가지고 여러개 특징 맵(feature map)을 만들어 분류 하는 완전 연결 계층으로, 이미지의 특징을 추출하기 때문에 이미지가 변형이 되더라도 잘 이닉할 수 있습니다(입력 데이터의 형상을 유지).

    * 특징 맵(feature map) : CNN에서 합성곱 계층의 입출력 데이터 


- 이미지도 3차원 데이터로 입력 받으며, 다음 계층에도 3차원 데이터로 전달합니다. 


- 형상을 가진 데이터를 제대로 이해할 가능성이 있는 큽니다. 

 

 

- 합성곱 연산

: 이미지 3차원(세로, 가로, 색상) data의 형상을 유지하면서 연산하는 작업으로, 입력 데이터에 적용한 것입니다. 

 

<- 합성곱 연산을 기호로 표기


- 이미지 처리에서 말하는 필터 연산에 해당 합니다. 
- 데이터와 필터의 형상을 (높이, 너비)로 표기 합니다. 
- 위 예의 경우 입력은 (4, 4), 필터는 (3, 3), 출력은 (2, 2)  
- 문헌에 따라 필터를 커널이라 칭하기도 합니다. 

- 필터를 적용한 후 데이터에 더해집니다.
- 편항은 항상 (1 x 1)만 존재합니다. 

 

 

패딩(padding)

: 합성곱 연산을 수행하기 전에데이터 주변을 특정값(예컨데 0) 으로 채워 늘리는 것을 의미합니다 .

 

- 합성곱 연산에서 자주 이용하는 기법 – 출력 크기를 조정할 목적으로 사용합니다. 

+ 패딩을 하지 않을 경우 data의 크기는 합성곱 계층을 지날 때마다 작아지게 되므로 가장자리 정보들이 사라지는 문제가 발생하기 때문에 패딩을 사용합나다.

 

 

 

-입력 데이터 주위에 0을 채운다 (0 생략함)

 

 

 

 

 

 

- 처음에 크기가 (4, 4)인 입력 데이터에 패딩이 추가되어 (6, 6)이 됩니다. 
- (3, 3) 크기의 필터를 걸면 (4, 4) 크기의 출력 데이터가 생성합니다. 

 

 

스트라이드

: input 데이터에 filter를 적용하는 위치의 간격을 의미합니다. 

 

 

- 필터를 적용하는 위치의 간격


- 스트라이드를 키우면 출력 크기는

  작아짐 

 

 

 

 

 

 

 

 

 

 

 

 

패딩, 스트라이드, 출력 크기 계산

- 입력 크기(H, W)
- 필터 크기(FH, FW)
- 출력 크기(OH, OW)
- 패딩 : P
- 스트라이드 : S

 

 

 

 

3차원 데이터의 합성곱 연산

: 이미지의 색은 보통 흑백이 아니라 RGB(Red, Green, Blue)컬러 이므로 RGB컬러에 대해서 합성곱을 해야합니다. 

 

3차원 데이터 합성곱 연산의 계산 순서

- 3차원의 합성곱 연산에서 주의할 점

 : 입력 데이터의 채널 수와 필터의 채널 수가 같아야 함.

 

- 필터 자체의 크기는 원하는 값으로 설정 가능.

  (단, 모든 채널의 필터가 같은 크기여야 함)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3차원 합성곱 구현 이론 

사진 한장을 RGB 필터로 합성곱하여 2차원 출력행렬(Feature map)을 출력하는 것입니다. 

 

 

합성곱 연산의 처리 흐름(편향 추가)

 

합성곱 연산의 처리 흐름(배치 처리)

이미지를 한 장씩 학습시키는 것은 학습속도가 느립니다. 따라서 100장의 이미지를 묶음으로 나눠서 한번에 학습시킵니다. 이를 minibatch라고 합니다. 

 

하지만 합성곱 계층을 미니 배치로 구현할 때 4차원 행렬의 연산이 됩니다. 따라서 연산의 속도가 느려지므로 행렬 연산을 빠르게 하기 위해 4차원이 아닌 2차원으로 차원을 축소해야할 필요가 있습니다.  이때!! im2col 함수를 사용합니다. 

 

 

 im2col 함수 원리 : 각 4차원 블럭을 R, G, B로 각각 나누어 2차원으로 변환 후 합쳐줍니다. 

 

 

 

 

k-최근접 이웃(k-Nearest Neighbor, kNN)

: 특정 공간 내에서 입력과 제일 근접한 k개의 요소를 찾아, 더 많이 일치하는 것으로 분류 하는 알고리즘 입니다. 

 

k - 최근접 이웃 특징 

① 데이터 분류에 사용되는 아주 간단한 지도학습 알고리즘 
- 지도학습 : 머신러닝 학습 시 데이터와 함께 데이터에 대한 레이블(정답)을 함께 부여하는 학습 방식.
- 데이터 분류 : 새로운 데이터를 기존 데이터의 레이블 중 하나로 분류하는 작업.

② 유사한 특성을 가진 데이터들끼리는 거리가 가깝고, 거리 공식을 사용하여 데이터 사이의 거리를 구함 
③ 분류기의 효과를 높이기 위해 파라미터를 조정 
④ K-Nearest Neighbors의 경우 k 값을 변경 
⑤ 분류기가 부적절하게 학습되면 overfitting 또는 underfitting이 나타날 수 있음 
⑥ K-Nearest Neighbors의 경우 너무 작은 k는 overfitting, 너무 큰 k는 underfitting을 보임

 

 

k-최근접 이웃(k-Nearest Neighbor, kNN)의 장단점

장점 단점
구현이 쉽다. 예측 속도가 느리다.
알고리즘을 이해하기 쉽다.   메모리를 많이 쓴다.
별도의 모델 학습이 필요 없다.  노이즈 데이터에 예민하다. 
하이퍼 파라미터가 적다 - 이웃의 개수(k)  

 

 

농구 선수의 경기 기록을 바탕으로, 그 선수의 포지션을 예측해보기!

 

데이터 전처리 

 

 

데이터 시각화 

 

`

 

 

k-최근접 이웃 적용 

 

 

 

 

 

 

 

 

'

서포트 벡터머신(Support Vector Machine, SVM)

: 사용하기 편하면서도 높은 정확도를 보이는 데이터 분류를 위한 지도학습 머신러닝 알고리즘.

 

 

 

① 서포트 벡터를 사용해서 결정 경계를 정의하고, 분류되지 않은 점을 해당 결정 경계와 비교해서 분류.
② SVM의 중요 용어


- 결정 경계(Decision Boundary) : 서로 다른 분류 값을 결정하는 경계

 

데이터에 2개 속성(feature)만 있다면 결정 경계는 이렇게 간단한 선 형태

속성이 3개로 늘어난다면 이렇게 3차원으로 그려야 한다.



 

- 이때의 결정 경계는 ‘선’이 아닌 ‘평면’이 된다.

 

- 우리가 이렇게 시각적으로 인지할 수 있는

  범위는 딱 3차원까지다.

 

- 차원, 즉 속성의 개수가 늘어날수록 당연히

  복잡

 

- 결정 경계도 단순한 평면이 아닌 고차원이

  될 텐데 이를 “초평면(hyperplane)” 이라고

  부른다

 

 

 

 

 

 

 

 

최적의 결정 경계(Decision Boundary)

- 어떤 그래프가 제일 위태로워 보이는가?

• C를 보면 선이 파란색 부류와 너무 가까워서 아슬아슬해 보인다.

 

- 그렇다면 어떤 결정 경계가 가장 적절해 보이는가?

• 당연히 F다. 두 클래스(분류) 사이에서 거리가 가장 멀기 때문이다.

 

- 결정 경계는 데이터 군으로부터 최대한 멀리 떨어지는 게 좋다는 걸 알았다.

- 실제로 서포트 벡터 머신(Support Vector Machine)이라는 이름에서 Support Vectors는 결정 경계와 가까이 있는 데이터 포인트들을 의미한다.

- 이 데이터들이 경계를 정의하는 결정적인 역할을 하는 셈이다.

 

 

 

- 서포트 벡터(support vector) : 결정 경계선과 가장 가까이 맞닿은 데이터 포인트(클래스의 점 들).
마진(margin) : 서포트 벡터와 결정 경계 사이의 거리.

 

- 가운데 실선이 하나 그어져있 는데, 이게 바로 ‘결정 경계’

 

- 그리고 그 실선으로부터 검은 테두리가 있는 빨간점 1개, 파 란점 2개까지 영역을 두고 점 선을 그어놓았다. 이게 바로 ‘마진(margin)’

 

- 최적의 결정 경계는 마진을 최대화한다.

 

- 옆 그림에서는 x축과 y축 2개 의 속성을 가진 데이터로 결 정 경계를 그었는데, 총 3개의 데이터 포인트(서포트 벡터)가 필요했다.

 

즉, n개의 속성을 가진 데이터에는 최소 n+1개 의 서포트 벡터가 존재한다는 걸 알 수 있다.

 

 

 

③ SVM의 목표는 바로 이 마진을 최대로 하는 결정 경계를 찾는 것.

고정된 학습 데이터와 테스트 데이터로 평가를 하다 보면 테스트 데이터에서만 성능이 좋은 과적합 문제가 발생할 수 있습니다. 이러한 문제점을 개선하기 위해서 교차 검증을 이용합니다. 

 

교차 데이터는 데이터 편중을 막기 위해서 별도의 여러 세트로 구성된 학습 데이터 세트와 검증 데이터 세트에서 학습과 평가르 수행하는 것입니다. 그리고 각 세트에서 수행한 평가 결과에 따라 하이퍼 파라미터 튜닝등의 모델 최적화를 더 손쉽게 할 수 있습니다. 

 

 

● K 폴드 교차 검증 

: 가장 보편적으로 사용되는 교차 검증 기법으로 먼저 K개의 폴트 세트를 만들어서 K번 만큼 각 폴트 세트에 학습과 검증 평가를 반복적으로 수행하는 방법입니다. 

 

 

사이킷런에서 K 폴트 교차 검증 프로세스 구현하기 위해 KFold와 StratifiedKFold 클래스를 제공합니다. 

 

KFold

 

1. 라이브러리

 

2. 데이터 불러오기

 

3. 5개의 폴드 세트로 분리하는 KFold 객체와 폴드 세트별 정확도를 담을 리스트 객체 생성

 

4.  KFold 객체의 split()를 호출하면 폴드 별 학습용, 검증용 테스트의 로우 인덱스를 array로 반환 및 학습 

 

5. 개별 iteration별 정확도를 합하여 평균 정확도 계산

 사이킷런(scikit-learn) 이란?

 : 파이썬 머시러닝 라이브러리 중 가장 많이 사용되는 라이브러리입니다. 파이썬 기반의 머신러닝은 곧 사이킷런으로 개발하는 것을 의미할 정도로 오랜 기간 파이썬 세계에서 인정 받았으며 사용되고 있습니다. 

 

사이킷런의 특징 

1. 파이썬 기반의 다른 머스러닝 패키지도 사이킷런 스타일의 API를 지향할 정도로 쉽게 가장 파이썬 스러운 API를 제공

2. 머신러닝을 위한 매우 다양한 알고리즘과 개발을 위한 편리한 프레임워크와 API를 제공

3. 오랜 기간 실적 환경에서 검증됐으며, 매우 맣은 환경에서 사용되는 성숙한 라이브러리 

 

사이킬런 설치 

 

1.  Anaconda prompt 

conda install scikit-learn 

 

 

2. Jupyter Notebook

pip install scikit-learn 

 

- Anaconda를 설치하면 기본 사이킷런까지 설치가 완료되기 때문에 별도의 설치가 필요 없습니다. 

 

 

붓꽃 품종 예측하기 

 

- 붓꽃 데이터 세트로 분꽃의 품종을 분류하는 것입니다. 붓꽃 데이터 세트는 꽃이의 길이와 너비, 꽃받침의 길이와 너비 피처를 기반으로 꽃의 품종을 예측하기 위한 것 입니다. 

 

분류 - 대표적인 지도학습 방법으로 명확한 정답이 주어진 데이터를 먼저 학습한 뒤 미지의 정답을 예측하는 방식입니다.

 

1. 라이브러리 

- sklearn.datasets : 사이킷런에서 자체적으로 제공하는 데이터 세트를 생성하는 모듈의 모임입니다. 

- DecisionTreeClassifier : 의사 결정 트리 알고리즘입니다. 

- train_test_split : 데이터 세트를 학습 데이터와 테스트 데이터로 분리하는데 사용하는 함수입니다. 

 

 

2. 데이터 불러오기 

 

3. DataFrame 으로 변환 

 

4. 학습용 데이터와 테스트용 데이터 분리 

test_size = 0.2 : 전체 데이이터 중 테스트 데이터가 20%, 학습 데이터가 80%로 데이터를 분활합니다. 

random_state : 호출할 떄마다 같은 학습/테스트 용 데이터 세트를 생성하기 위해 주어지는 난수 발생 값입니다. 

- 어떤 값을 지정해도 상관 없습니다. 

 

 

5. DecisionTreeClassifier 객체 생성

DecisionTreeClassifier 객체는 fit() 메서드에 학습용 피처 데이터 속성과 결정 값 데이터 세트를 입력해 호출하면 학습을 수행합니다. 

 

 

6. 학습 수행

 

7. 학습이 완료된  DecisionTreeClassifier 객체에서 테스트 데이터 세트로 예측 수행

예측은 반드시 학습 데이터가 아닌 다른 데이터를 이용해야 하며, 일반적으로 테스트 데이터 세트를 이용합니다. 

- predict( ) 메서드에 테스트용 피처 데이터 세트를 입력해 호출하면 학습된 모델 기반에서 테스트 데이터 세트에 대한 예측갑이 반환됩니다. 

 

 

8. 성능 평가(정확도)

accuracy_score( ) 함수를 통해서 정확도를 출력합니다. 

 

 

1. 데이터 세트 분리 : 데이터를 학습데이터와 데스트 데이터로 분리
2. 모델 학습 : 학습데이터를 기반으로 ML 알고리즘을 적용해 모델 학습
3. 예측 수행 : 학습된 ML 모델을 이용해 테스트 데이터 분류 예측
4. 평가 : 이렇게 예측된 결과값과 테스트 데이터의 실제 결과값을 비교 모델 성능 평가.

 

순환신경망

: RNN(Recurrent Neural Network)는 뉴런의 상태(state)를 저장하고 이를 다음 스텝에서의 입력으로 사용함으로써 긴 순서열에 대해서도 예측을 할 수 있는 신경망 구조이다.

 

- 순차적(sequence) 인 데이터를 입력 받아 결과값을 도출하는데 사용하는 딥러닝 모델
- 대표적으로 자연어 처리에 상당히 많이 사용
- 이전 입력 값들(단어들)이 현재 입력 값(단어)의 출력 값(품사)에 영향을 줌

 

품사가 도출 되도록 프로그램을 만들었는데, google 이라는 단어를 봤을 때 자리에 따라서 동사와 명사로 다른 품사로 출력됩니다. 문장을 통해서 공통점을 찾아 출력될 수 있도록 만듭니다 . 제시된 방향성을 정해줘야지 정확한 데이터를 출력해줍니다. 

 

RNN의 일반적인 구조

 

RNN 의 심층 구조

활성화 함수 : 탄젠트 함수 사용. 

 

시간 차를 두고 순차적인 데이터를 넣습니다. 시계열의 특징을 가지고 있습니다. 

 

RNN 의 구조 메모리 셀

메모리 셀 (memory cell 혹은 간단히 cell)
- 타임 스텝 t 에서 순환 뉴런의 출력은 이전 타임 스텝의 모든 입력에 대한 함수이기 때문에 이를

  일종의 메모리 형태라고 말할 수 있음

- 타임 스텝에 걸쳐서 어떤 상태를 보존하는 신경망의 구성 요소
- 보통 RNN 에서 셀이라고 말할 때는 완전 연결 신경망에서 층 ( 을 의미

일반적으로 타임 스텝 t 에서의 셀의 상태 ℎ𝑡 ℎ는 hidden 을 의미

RNN 네트워크에 셀이 한 개일 경우의 가중치 , 상태값 , 출력값

 

 

import tensorflow as tf
import numpy as np

tf.set_random_seed(777)

# hello 다음을 추천해주게끔 하는...
# 스펠링은 각각의 독립적인 의미를 가지고 있지만
# 'he'를 입력 했을 때, 서로의 연관성을 가지고 추천하게끔 만들어준다.
# 컴퓨터 선택의 최적화 되어 있는 수치로 표현 해야한다.

# h:0 , e:1 , l:2 , o:3 임의의 수를 넣어준다.
# One Hot Encoding

h = [1,0,0,0]
e = [0,1,0,0]
l = [0,0,1,0]
o = [0,0,0,1]

# RNN input_dim(4) -> output_dim(2), hidden_size(2)
hidden_size = 2

cell = tf.contrib.rnn.BasicRNNCell(num_units=hidden_size) 
# contrib : 상당수 많은 개발자들이 미리 구현해서 오픈하거나 공개하는 경우가 많다.
# print("cell:", cell.output_size, cell.state_size)

x_data = np.array([[h,e,l,l,o]],dtype=np.float32)
# print("x_data:", x_data)

output, _states = tf.nn.dynamic_rnn(cell, x_data, dtype=tf.float32)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())

    print('output: ',output.eval())
    
eval() : 내부에서 자동적으로 tensor들의 동작이 되어지고 출력되지는 결과값 들을 return 시킨다.

 

입력값이 1x2 행렬이고 , RNN 의 상태값이 1x3 의 행렬일 경우 , W 는 총 5 개의 행을 가지게 됩니다

매개변수 갱신
신경망 학습의 목적 : 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는 것입니다. 

 

- 확률적 경사 하강법(SGD : Stochastic Gradient descent)
: 최적의 매개변수 값을 찾는 단서로 매개변수의 기울기(미분)를 이용합니다. 

SGD 단점

: 방향성이 위에서 아래로 내려올 때는 빠를게 학습하면서 찾아가지만 평면적인 면으로 가게 되면 더이상 오차가 줄어들지 않는 문제점이 생길 수 있습니다. 

 

위의 그림과 같은 모습으로 나타나게 됩니다. 

 

SGD에 의한 최적화 갱신 경로 : 최소값인 (0, 0)까지 지그재그로 이동하니 비효율적이며 퍼포먼스의 문제를 야기합니다. 

 

 

① SGD 단점의 개선책 - 모멘텀(Momentum)

- V : 속도(Velocity)
- 기울기 방향으로 힘을 받아 물체가 가속된다는 물리 법칙

- 올바르게 최소값을 찾아가는 장점을 가집니다. 

 

 

 

- 모멘텀에 의한 최적화 갱신 경로

 

② AdaGrad :  : 각각의 매개변수에 맞춤형 값을 만들어 주는 방식

 

- 신경망 학습에서는 학습률 값이 중요한데, 학습률 값이 너무 작으면 학습 시간이 너무 길어지고, 반대로 너무 크면

  발산하여 학습이 제대로 이뤄지지 않습니다. 효율적으로 빠르게 최소값을 찾아가도록 하는 것입니다. 


- 학습률 감소(learning rate decay) :
    학습률을 정하는 효과적 기술
    처음에는 크게 학습하다가 학습률을 점차 줄여가면서 조금씩 작게 학습시키는 방법
    학습률을 서서히 낮추는 가장 간단한 방법은 매개변수 전체의 학습률 값을 일괄적으로 낮추는 것

 

- 최소값을 향해 효율적으로 이동
- y축 방향은 기울기가 커서 처음에는 크게 움직이지만, 그 큰 움직임에 비례해 갱신 정도도 큰 폭으로 작아지도록 조정
- 따라서 y축 방향으로 갱신 강도가 빠르게 약해지고, 지그재그 움직임이 줄어듬

 

 

③ Adam

: 모멘텀과 AdaGrad를 융합한 듯한 방법으로 2015년에 제안된 새로운 방법으로 두가지의 특징을 같이 점목하여 효율적으로 처리 할 수 있도록 만들어진 것이다. 

무조건 이상적인 최적의 값이 나온다고 할 수 없습니다. 그렇기 때문에 입력으로 전달되는 데이터에 따라서 최적인 알고리즘을 골라서 사용하는 것이 중요합니다. 

 

1) 경사하강법을 적용

2) 결과를 확인 - 데이터에 따라서 값이 오차가 클 때

3) 새로운 알고리즘을 적용

 

가장 중요한 것은!!! data 입니다!!! 절대적이라고 해도 과언은 아니라고 할 수 있습니다. 

data에 맞는 최적의 모델을 설계하는 것이 포인트 입니다!!

 

 

MNIST 데이터셋으로 본 갱신 방법 비교

가장 크게 효과를 발휘하는 AdaGrad인것을 확인 할 수 있습니다. 가장 안좋은 포퍼먼스를 보여주는 알고리즘은 SGD(경사하강법)인 것을 확인 할 수 있으며, 가장 손실함수의 값이 크다는 사실까지 확인됩니다.

 

 

 

가중치 초기값

 

가중치 감소(weight decay) 기법
 - 오버피팅을 억제해 범용 성능을 높이는 테크닉
 - 가중치 매개변수의 값이 작아지도록 학습하는 방법
 - 즉, 가중치 값을 작게 하여 오버피팅이 일어나지 않게 하는 것


지금까지의 가중치 초기값은 0.01 * np.random.randn(10,100) 처럼 정규분포에서 생성되는 값을 0.01배 한 작은 값(표준편차가 0.01인 정규분포)을 사용.

가중치를 표준편차가 0.01인 정규분포로 초기화할 때의 각 층의 활성화값 분포

 

 

- 가중치의 초기값으로 Xavier 초기값을 이용할 때의 각 층의 활성화값 분포

- 각 층의 활성화 값들을 광범위하게 분포시킬 목적으로 가중치의 적절한 분포를 찾고자 함.

- 앞 계층의 노드가 n개라면 표준편차가 sqrt(1/n)인 분포를 사용하면 된다는 결론.

- He 초기값 : sqrt(2/n)

 

 

ReLU를 사용할 때의 가중치 초기값

 

- 활성화 함수로 ReLU를 사용한 경우의 가중치 초기값에 따른

  활성화값 분포변화

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MNIST 데이터셋으로 본 가중치 초기값 비교

 

배치 정규화
- 배치 정규화를 사용한 신경망의 예

 

 

 

- 배치 정규화는 데이터 분포가 평균이 0, 분산이 1이

  되도록 정규화함

 

 

 

 

 

 

 

- 배치 정규화 계산 그래프

 

 

- 배치 정규화의 효과 : 배치 정규화가 학습 속도를 높인다.

 

 

 

 

 

 

 

 

 

 

 

오버피팅
: 신경망이 훈련 데이터에만 지나치게 적응되어 그 외의 데이터에는 제대로 대응하지 못하는 상태

 

오버피팅 발생 주요 원인
 - 매개변수가 많고 표현력이 높은 모델
 - 훈련 데이터가 적음

 

오버피팅 억제용 : 가중치 감소(weight decay)
 - 학습 과정에서 큰 가중치에 대해서는 그에 상응하는 큰 페널티를 부과하여 오버피팅 억제하는 방법
 - 원래 오버피팅은 가중치 매개변수의 값이 커서 발생하는 경우가 많음.

 

 

 

드롭아웃
 - 신경망 모델이 복잡해지면 가중치 감소만으로는 대응하기 어려울 때 이용할 수 있는 기법
 - 뉴런을 임의로 삭제하면서 학습하는 방법으로 초적의 파라미터를 찾는 것 
 - 훈련때는 데이터를 흘릴 때마다 삭제할 뉴런을 무작위로 선택하고, 시험 때는 모든 뉴런에 신호를 전달하되

   각 뉴런의 출력에 훈련 때 삭제한 비율을 곱하여 출력(완전연결형). 

 

 

 

하이퍼파라미터 

  - 각 층의 뉴런 수
  - 배치 크기
  - 매개변수 갱신 시의 학습률
  - 가중치 감소 등의 매개변수

 

데이터 셋의 구별

  - 훈련 데이터 : 매개변수 학습
  - 검증 데이터 : 하이퍼파라미터 성능 평가(훈련 데이터 중 20% 정도 분리)
  - 시험 데이터 : 신경망의 범용 성능 평가

 

하이퍼파라미터 최적화

 - 0단계 : 하이퍼파라미터 값의 범위를 설정
 - 1단계 : 설정된 범위에서 하이퍼파라미터의 값을 무작위로 추출
 - 2단계 : 1단계에서 샘플링한 하이퍼파라미터 값을 사용하여 학습하고, 검증 데이터로 정확도를 평가

             (단, 에폭은 작게 설정)
 - 3단계 : 1단계와 2단계를 특정 횟수(100회 등) 반복하여, 그 정확도의 결과를 보고 하이퍼파라미터의 범위를 좁힘

 

 

 

- 실선은 검증 데이터에 대한 정확도

- 점선은 훈련 데이터에 대한 정확도

논리 연산자 AND, OR, XOR, NOT 이 존재합니다. 

 

XOR data set

: 입력 신호가 다를 때 신호를 내보내는 연산자 입니다. 

- 서로 다른 값 True , 서로 같은 값 False 선형적으로 구분할 수 있는 방법이 물리적으로 불가능합니다. 

- 하나의 게이트로는 그래프로 그릴 수 없지만, 다층의 멀티 레이어로 구성할 때 그래프 그리는 것이 가능합니다. 

 

노드를 다층으로 가져가므로 물리적으로 gate를 

조합 함으로 분류가 가능하도록 되었습니다. 

 

- 비선형의 모형으로 구분

 

 

 

 

 

 

 

 

 

 

 

0) 데이터 정리 

1) 가설함수 설정 

 

2) 손실함수 설정

 

3) 경사하강법 적용

 

4) tensorflow 흐름

 

결과) 

50퍼센트의 정확도를 보이는 결과가 나타납니다. 

- Xor의 모델은 단독의 gate로 설계할 수 없습니다.  신경망을 멀티레이어드의 형태로 추가해보록 하겠습니다. 

 

 

추가 레이어드 구성) 

 

가설함수 변경) 

 

W1, W2의 값의 변화 확인으로 변경) 

 

결과) 

100프로로 정답과 일치하게 되었습니다. 

 

+ Recent posts