신경망의 활성화 함수는 출력 계층의 값이 커지면 최종 출력이 1로 수렴하는 단위 계단 함수와 로지스틱 함수를 사용했습니다.
쌍곡탄젠트 함수와 소프트 플러스
선형 유닛Rectified Linear Unit ReLU
시그모이드 함수와 쌍곡 탄젠트 함수는 미분 계산을 기반으로 두는 함수지만 ReLU는 0 또는 입력값을 그대로 내보내므로 계산이 편리합니다.
심층 신경망 Deep Neural Network,DNN은 시그모이드 함수에 전파와 역전파를 여러 번 적용하다 보면 가중치가 발산하거나 곡선의 기울기가 0이 되어 버리는 기울기 소실 문제가vanishing gradient problem 발생하므로 ReLU를 사용합니다.
확률 기반 경사 하강법 sgd stochastic gradient Descent : 신경망 학습에서는 데이터 일부를 뽑은 미니 배치를 이용해 가중치를 반복해서 업데이트 하는 것
훈련 오차와 테스트 오차
학습 과정에서 얼마나 지도 학습 데이터에 오차가 발생하는지 나타내는 값을 훈련 오차라고 합니다.
학습기 구축 과정의 목표는 훈련 오차를 작게 만드는 것입니다.
매개변수 업데이트 횟수를 가로축으로 , 오차를 세로축으로 설정했을 때 만들어지는 곡선을 학습 곡선이라고 합니다.
미지의 데이터를 준비하는 것은 어려우므로 테스트 데이터를 이용해 오차를 확인합니다. 이때 오차를 테스트 오차라고 합니다.
정규화와 드롭아웃
과적합을 억제하는 방법으로 가중치 계수에 제한을 가하는 정규화가 있습니다.
신경먕에서 과적합을 억제하는 또 한가지 방법으로는 드롭아웃이 있습니다.
드롭아웃은 확률 기반으로 다층 네트워크 유닛을 선별한 상태에서 학습을 실행하는 것입니다.
그밖의 신경망 학습
데이터 정규화
정규화 normalization
표준화 standardization
"평균을 0으로 한다." "분산(표준 편차)을 1로 한다."
"상관관계를 0으로 한다 " 같은 작업을 백색화 whitening라고 합니다.
정규화를 전처리
데이터 확장
여러가지 네트워크 이용
구조가 다른 여러 개의 신경망을 구축하고 각각 학습한 다음 모델의 평균을 구하면 학습의 일반화 성능을 향상시킬 수 있습니다.
학습률 ε의 결정 방법
학습률을 자동으로 결정하는 알고리즘으로 확률적 경사 하강법의 하나인 에이다그래드 AdaGrad를 많이 사용합니다.
02. 제한 볼츠만 머신
볼츠만 머신과 제한 볼츠만 머신
볼츠만 머신은 노드들이 무향 그래프로 연결된 네트워크입니다.
볼츠만 머신은 퍼셉트론처럼 입력과 출력을 하는 유향 그래프가 아니므로 계산하기 어렵습니다.
제한한 것이 제한 볼츠만 머신Restricted Boltzmann Machine,RBM
제한 볼츠만 머신은 볼츠만 머신의 두 계층 중 같은 계층의 유닛은 서로 연결하지 않도록 구성되어 있습니다.
선행 학습 pre-training
다층 네트워크를 입력받은 순서대로 제한 볼츠만 머신 같은 두 계층의 네트워크로 분리(오토인코더로 설정)합니다.
다층 네트워크는 기울기 소실 문제가 발생해 학습이 제대로 되지 않을 때가 있습니다. 계층을 깊게 할 수록 그 영향이 더 두드러집니다. 가중치 매개변수의 초깃값을 무작위로 결정하는 것도 원인 중 하나입니다. 이를 해결하는 방법으로 선행 학습이 있습니다.
03. 심층 신경망
지도학습과 자율 학습
심층 신경망: 유닛 수와 계층 수가 3가지 이상이 되도록 다층 구조를 취하는 신경망은 심층 신경망이라고 합니다.
심층 신경망을 사용하는 학습을 딥러닝이라고 합니다.
심층 신뢰 신경망 :
이 기술은 가시 계층에서 순서대로 제한 볼츠만 머신의 구조를 꺼내 학습합니다.
심층 신뢰 신경망은 제한 볼츠만 머신의 축적만으로는 단순한 자율학습입니다.
오토인코더
오토인코더는 전파형 네트워크의 하나입니다.
특징:
1. 입력 데이터 1을 통해 얻은 출력 데이터 1을 다시 입력 데이터 2로 설정합니다.
2. 입력 데이터 2에서 얻은 출력 데이터 2를 입력 데이터 1과 비교합니다.
3. 출력 데이터 2와 입력 데이터 1이 서로 더 가까운 상태가 되는 특징을 얻습니다.
4. 얻은 특정을 통해 더 나은 데이터를 얻습니다.
오토인코더는 지도 데이터가 없는 자율학습입니다.
스파스 코딩
수학에서는 백터나 행렬의 많은 원소가 0일 때 이를 스파스하다고 합니다.
04. 합성공 신경망
합성곱 처리
합성곱 신경망의 C는 합성공 Convolutional을 의미합니다.
2개의 함수 중 하나를 평행 이동시키면서 합성공을 취한 적분 값을 계산합니다.
합성공 신경망의 구성
합성공 계층과 풀링 계층을 거쳐 입력 이미지의 특징을 추출해서 출력하는 이미지인 특징 맵을 얻습니다.
합성공 계층과 풀링 계층 사이에 정규화 계층을 포함하기도 합니다.
정규화 계층을 합성곱 계층에서 처리된 이미지에 관해 전체 화소 값의 평균을 0으로 하는 감산 정규화 또는 분산을 정력하는 나누기 정규화 등을 수행합니다.
이처럼 합성곱 계층과 풀링 계층 사이를 반복해서 거친 후 마지막에는 완전 연결 계층 fully connected layer을 구성해서 출력합니다.
출력 내용으로 분류 결과 또는 식별 결과(라벨링한 사물의 이름)을 얻고 싶을 때는 소프트맥스 softmax함수를 이용합니다. 각 라벨을 모두 합한 값이 1이게 변환(정규화)해서 확률 형태로 나타낼 수 있습니다.
풀링 계층에서는 단순히 미이지를 축소합니다. 축소 처리는 필수는 아니지만 후속 네트워크에서의 처리 부담을 가볍게 하는 효과와 축소 처리에 의한 특징량의 압축 효과가 있습니다.
05. 순환 신경망
순환 신경망 : Recurrent Neral Network , RNN은 몇 단계 전으로 거슬러 올라가 데이터를 반영할 수 있는 신경망입니다.
시계열 데이터 등의 맥락을 고려해 학습할 수 있으므로 음성 같은 파형 데이터나 자연어 등의 학습에 이용합니다.
순환 신경망의 학습은 확률적 경사 하강법을 이용하며 실시간 순환 학습 Real-Time Recurrent Learning, RTRL이나 시간 기반 오차역전파BackPropagation Through Time, BPTT로 가중치를 업데이트합니다.
심층 순환 신경망Deep RNN과 양방향 순환 신경망 Bidirectional RNN도 있습니다.
Long Short- Term Memory LSTM
순환 신경망은 거슬러 올라가는 단계 수가 많아지면 기울기 소실 문제 때문에 제대로 학습할 수 없습니다. 이문제를 개선한 것이 Long Short -Term Memory입니다.
LSTM은 신경망의 중간 계층에서의 각 유닛을 LSTM블록이라는 메모리 유닛으로 치환한 구조입니다.
LSTM블록에는 입력 INPUT게이트, 망각 forget게이트 , 출력 output 게이트 라는 세가지 게이트가 있으며 메모리 셀에 저장된 1단계 이전의 상태를 망각 게이트에서 참조(요소곱)합니다. 그리고 입력 게이트와 망각 게이트를 잘 여닫으면서 출력을 조정합니다.
06. 텐서플로를 이용한 오토인코더 예제
오토인코더 모델 구성
오토인고더는 다음과 같은 조건으로 구성합니다.
1. 입력값으로 이미지만 포함합니다.(라벨 없음).
2. 은닉 계층의 노드 수가 입력 계층의 노드 수보다 적도록 구성합니다.
3. 출력 계층의 노드 수는 입력 계층의 노드 수와 같습니다.
4. 은닉 계층의 노드 수가 적으므로 주요 특징량(feature)위주로 추출합니다. 마치 주성분 분석과 비슷한 효과를 얻을 수 있습니다.
5. 출력 계층에서는 입력 계층의 값을 복원(reconstruction)할 수 있습니다.
필요한 모듈 불러오기
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('./data/mnist/',one_hot = True)
이 경우 다시 수행하기
하이퍼파라미터 설정하기
#모델 관련 하이퍼파라미터 설정
num_input = 28 * 28
#'입력 계층 노드 수 == 출력 계층 노드 수'이므로 num_output은 따로 정의하지 않습니다.
num_hidden = 256
#학습 관련 하이퍼파라미터 설정
learning_rate = 0.01
training_epoch = 10
batch_size = 100
#평가 관련 하이퍼파라미터 설정
num_output_sample = 10
정점 수가 n일 때 n*n행렬이며 정점 사이가 변으로 연결되어 있으면 1, 연결되어 있지 않으면 0이 됩니다.
근접행렬 incidence matrix: 정점과 변의 관계를 나타내는 행렬입니다.
변수가 m일 때 n*m행렬이며 정점과 변이 연결되어 있다면 1, 연결되어 있지 않으면 0이 됩니다.
트리 구조 그래프
그래프에 있는 여러 개 정점에서 출발점이 되는 정점으로 돌아가는 경로가 유일하며 , 출발점이 되는 정점이 막다른 정점(더는 새로운 변을 통해 이동할 수 없는 정점)인 그래프를 트리 구조라고합니다.
출발점이 되는 정점은 루드 Root(뿌리)라고 합니다
의사결정트리는 통계 모델 예측을 위한 조건 분기에 사용되는 규칙으로 사용합니다.
탐색 트리는 상태(조건이 포함된 정보 구조)를 나누는 수단으로 사용합니다.
02. 그래프 탐색과 최적화
탐색 트리 구축
이러한 최적 경로 탐색은 현재 시간 t에 해당하는 상태에 어떤 행동을 했을 때 얻을 수 있는 이익이나 지불 비용을 계산해 다음 시각인 t+1의 상태를 결정하는 것과 같습니다. 이 과정을 반복 실행하면 목적지에 도달했을 때 시간인 T의 이익을 최대화하거나 비용을 최소화하는 계획 문제로 다룰 수 있습니다. 이러한 계획 문제를 단단계(의사)결정 문제라고 합니다.
이진 탐색 트리 binary search tree: 인덱스 정렬된 데이터를 반으로 나눠 저장하는 작업을 반복해 트리구조를 만든 후 원하는 데이터를 빠르고 효율적으로 찾습니다.
탐색 트리 추적방법
깊이 우선 탐색Depth-first search DFS : 루트 노드에 연결된 경로 중 하나를 선택해 막다른 노드에 도착할 때 까지 일단 탐색한후 , 다시 바로 앞 노드로 이동해 다음 막다른 노드까지 탐색을 반복합니다.
너비 우선 탐색 Breadth-first search , BFS: 루트 노드와 연결된 노드를 모두 탐색한 다음 바로 다음에 깊이의 노드들을 전부 탐색하는 과정을 반복합니다.
노드들 넣는 상자를 스택이라고 합니다.
노드를 넣는 상자를 큐라고 합니다.
효율적인 탐색 방법
비용에 따른 탐색 방법
게임 트리를 전략에 이용하는 방법
동적 계획법
03. 유전 알고리즘
유전 알고리즘구조
생물이 살아가면서 교차 , 돌연변이 도태 등으로 환경에 적합하도록 진화한다는 가설에 기반을 둔 최적화 기법을 유전 알고리즘이라고 합니다.
이 과정에서 교차와 돌연변이 등 진화론 아이디어를 도입한 계산 방법을 진화연산이라고 합니다.
진화연산은 다음 특징이 있습니다.
집단성 : 개체 다수를 집단으로 설정해 동시에 탐색할 때는 병렬 연산합니다.
탐구 가능성 : 탐색 공간(설명 변수와 목적 변수 등이 취할 수 있는 값의 법위)의 자세한 사전 지식을 요구하지 않습니다.
다양성 : 집단에 있는 개체의 다양성으로 노이즈와 동적 변화에 적응성을 갖게 되므로 견고한 답을 얻을 수 있습니다.
유전 알고리즘 용어와 알고리즘 흐름
도태(선택) 개체를 남기는 처리 유전 알고리즘에서 적합도가 높은 개체를 선택해 남기면 다음 세대가 되었을 때 집단 안에서 더 최적 해결책에 가까운 개체가 많아지는 상태를 만들 수 있습니다.
교차 개체 2개에서 자식 둘을 생성하는 처리 부모의 유전자를 재조합해 자식 둘을 생성하는 것
돌연변이 개체 1개의 유전자를 변화시키는 처리 부모의 유전자를 재조합해 자식 한 명을 생성하는 것으로 적합도를 높인다는 기준으로 개체를 다루는 도태나 교차와 달리 무작위 탐색에 가깝습니다.
유전 알고리즘의 사용예:
외판원 문제 Traveling salesman problem TSP
복수 지점을 한번 만 통과하는 최단거리(또는 최단시간)을 이동해 출발점으로 돌아오는 경로를 계산하는 조합 최적화 문제
04. 신경망
헵의 법칙과 형식 뉴런
신경망 : 신경 세포(뉴런_는 다른 신경 세포에게 전기 신호를 받았을 때 전기 신호가 일정 기준을 넘으면 다음 신경 세포로 신호를 전달합니다.
헵의 법칙Hebb : 시냅스의 유연한 연결, 즉 가소성 있는 변화를 의미하며 실제로 일어난다는 사실이 나중에 밝혀졌습니다.
신경망
계층
입력계층 -> 출력 계층
입력계층 -> 중간계층 -> 출력계층
계층: 신경망에서는 같은 종류의 형식 뉴런을 여러 개 병렬로 배열해 유닛을 형성하는 것
활성화 함수 :
형식 뉴런에서 받은 입력값을 출력할 때 일정 기준에 따라 출력값을 변화시키는 비선형 함수를 활성화 함수라고 합니다.
단위 계단 함수
시그모이드 함수
계단 함수
퍼셉트론
볼츠만 머신 : 각 노드가 양방향으로 연결된 신경망 구조를 제압합니다.
이웃 노드가 받은 자신의 출력값을 다시 자신이 받는 피드백 메커니즘이 동작한다는 것이 핵심입니다.
요차역전파법backpropagation :
다층 퍼셉트론: 입력 계층과 출력 계층만 있는 간단한 퍼셉트론의 약점은 선형 분리할 수 있는 데이터에만 적용할 수 있으며 계산 시간이 길다는 것입니다.
다층 퍼셉트론에서는 순방향으로 계층마다 출력을 계산한 후 오차역전파법을 이용해 출력 계층에서 역방향으로 가중치 업데이트를 실행합니다.
자기조직화 self-organization: 신경망의 학습 과정에서 네트워크가 데이터 입력과 출력 후의 가중치를 업데이트해서 스스로 일관성 있게 변화해 나가는 것
05. 텐서플로를 이용한 신경망 만들기 예제
필요한 모델 이불러오기
import tensorflow as tf
import numpy as np
MNIST 데이터 다운로드하기
학습용 데이터 : 55,000
검증용 데이터 5,000
테스트용 데이터 10,000
이미지와 라벨 쌍으로 구성합니다.
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('./data/mnist/',one_hot = True)