본문 바로가기

Data Science/4. 딥러닝

[n411]Neural Network(NN) Foundation

■ Key words

  ㆍ신경망(Neural Network) / 인공신경망(Artificial Neural Network)

  ㆍPerceptron

  ㆍNeuron/Node

  ㆍActivation Function

  ㆍLayer

  ㆍBias

  ㆍIteration

 

■ 주요내용

  ㆍPerceptron : 다수(두 개 이상)의 input을 받아 하나의 output을 출력하는 것

     * perceptron의 예시

     - AND GATE : 입력신호 모두 1이여야 1

     - NAND GATE(Not AND) : 입력신호 모두 1일 경우에만 0

     - OR GATE : 입력신호 중 하나라도 1이면 1

     - XOR GATE : 입력신호가 모두 다를 떄에만(모두 0이거나 1인 경우 제외) 1; AND(OR, NAND)

  ㆍ신경망의 기본 구조 : 뇌의 실제 신경계 특징을 모사하여 만들어진 계산 모델(computational model)

     - Neuron/Node로 구성

     - 한 개의 뉴런으로 여러 입력신호가 입력되면 각각 고유한 가중치(weight)가 반영되어 더해짐(weighted sum)

     - 가중치 : 뉴런 간 시냅스의 연결강도(시냅스의 두께, 개수)와 같은 역할

     - 가중합이 임계값(threshold)를 넘을 경우에만 다음 층(layer)로 신호가 전해짐

     ⇒ 데이터에서 발견할 수 있는 복잡한 관계를 학습할 수 있는 알고리즘과 데이터 구조를 만드는 것이 중요

  ㆍ활성함수(Activation Function) : Step Function, Sigmoid Function, ReLu(Rectified Lenear Unit) 등

     입력값을 출력값으로 내보내는 함수; 다음층으로 신호를 얼만큼 전달할 지 결정하는 함수(transfer function)

     - 신경망 연산 : 벡터(행렬)의 연산과 같이 신경망을 가중치와 bias(상수)를 반영하서 가중합 계산

     - 학습(training, learning) : 입력값을 출력값으로 내보낼 때, 그 가중치를 찾는 것

  ㆍ신경망 층(Layer) : Input Layers / Hidden Layers / Output Layers로 구분

     - 입력층(Input Layer) : dataset으로부터 입력 / feature의 수와 node의 수가 같음 /

                                   계산을 하지 않고 그대로 값 전달 / 신경망의 층수(depth) 계산에 불포함

     - 은닉층(Hidden Layer) : 계산이 일어나는 층 / 계산의 결과를 사람이 볼 수 없기 떄문에 hidden layer / 

                                     deep learning은 hidden layer가 둘 이상인 신경망을 의미

     - 출력층(Output Layer) : 출력층에는 대부분 활성화 함수가 존재; 문제에 따라 다른 종류 사용 / 

       · 회귀문제 : 활성화함수 불필요 / output node 수 = 출력변수의 수

       · 이진분류(binary classification) : sigmoid 함수를 사용하여 출력값을 확률로 변환하여 class 결정(1 or 0)

       · 다중분류(multi-class) : output node수 = 분류 수 / softmax 함수를 활성화 함수로 사용

  ㆍ기계학습(Machine Learning)과 신경망학습(Deep Learning)의 차이

     - 기계학습 : 사용자가 데이터 분석 후 특성을 설계하고 찾아냄. 컴퓨터는 학습과정을 통해 특성 - 출력값 간 관계를 찾아줌

     - 신경망학습 : 데이터에서 필요한 특성들을 신경망이 스스로 조합하여 찾아냄(feature engineering 불필요)

     ⇒ 표현학습(Representation Learning)이 차이점. Deep learning은 데이터 특성(feature)을 문제를 풀기 쉽도록 표현(representation)하는 방향으로 학습하는 능력이 있음. 신경망의 구조깊이를 변화시키며 데이터를 보다 유용하게 표현 가능

    - 반복(Iteration) : epoch를 몇 번에 나누어 학습할 지 정하는 횟수

 

■ Session note

ㅁ 오전 session
  ㆍ문제를 deep learning으로 풀어야 하는지, ML만으로 해결이 가능한지 생각해보기
  ㆍPerceptron : 두 개 이상의 input, 하나의 output
  ㆍDeep Learning : hidden layer가 2개 이상인 perceptron
  ㆍ활성함수가 반드시 적용돼야 하는 것은 아니다
  ㆍDeep Learning 학습 : 가중치를 학습하는 것
     - 출력값 ≒ 실제값; 가중치 조정을 통해 출력값 조정 가능
  ㆍBias도 학습을 함 : 
  ㆍ활성함수의 적용 : node(neuren) 안에서 연산되는 것. Hidden layer와 output later에 적용 가능
  ㆍDeep learning library : tesorflow - 한 layer씩 만들 수도 있고 / pre-trained layer를 가져와서 활용할 수도 있음
  ㆍlearning rate != 가중치 ; learning rate은 학습을 한 것을 다음 학습에 얼마나 반영할 것인지 정하는 것
     cf> 도전과제 optimizer
  ㆍ회귀문제 : output node를 하나로 / 분류문제 : 여러 개의 output node로
  ㆍinput node의 수 = feature수 != data 수
  ㆍoutput node의 수 = target의 수(분류 : class의 수 / 회귀 : 1)
  ㆍbinary 문제 : sigmoid로 node 1개 사용(역치에 따라 0 또는 1) / class 2개이므로 output node를 2개 만들 수도 있음
     - 연산이 빠른 sigmoid를 자주 사용하는 편; 하나가 결정되면, 나머지 하나는 자동으로 결정 됨
  ㆍ비용함수 : 최적화에 필요한 개념
  ㆍ신경망의 비선형성 : linear하지 않고 곡선 등 선형관계가 아니다
     - DL은 ML과 다르게 알아서 가중치를 계산하므로 일일이 구해줄 필요가 없다
  ㆍbias : node의 활성화 정도를 도와주는 것. 상수 개념.
     i. e.> 2x >= 0.5 → 1, 2x < 0.5 → 0 ⇒ 2x + a >= 0.5 ; 여기서 a가 bias / 0.5rk theta(threshold)

ㅁ 오후 session
  ? 오전 self 함수 : softmax 함수 아닌지? softmax는 weight와 bias를 모두 풀어쓴 식. 예시는 hidden node가 2개인 것이 맞음
  ? 가중치는 양의 값만 가능한가? g1*x1 - g2*x2 != 0으로 하면 XOR 문제가 쉽게 풀릴 것 같은데
    -> boolean은 해결 못 하나?
  ? epoch과 교차검정은 비슷한 개념? epoch는 train dataset를 몇 번 학습했는지 횟수를 의미함
  ? 다층 perceptron과 deep learning이 다른가?
  ㆍ10,000개의 데이터를 2,000개씩 5개 세트로 나누어 각 세트를 한 번씩 학습한 경우(batch, iteration; parameter 최적화) : 1 epoch
  ㆍnode가 많다고 좋은 것은 아니며, 적다고 나쁜 것도 아니다. 최적의 node수를 찾아야 한다.
     - (input * output) ^ (1/2)의 안에서 node 수 정하기
  ㆍf1_score / recall 모두 1에 가까운 경우 : 과적합 or data leakage
  ㆍflatten : 고차원 데이터(그림 등)를 1차원 데이터(선형)로 바꿔주는 것
  ㆍsoftmax함수 : 대략적인 클래스의 확률을 얘기해줌
  ㆍ집값예측 : Sigmoid, ReLu 등의 함수가 꼭 필요한 것은 아님; 함수가 없으면 신경망 가중치 그대로 결과가 출력됨
  ㆍBias : weight에 조정을 줄 수 있는 상수값

 

■ 주요함수

  ㆍPerceptron

# AND GATE
def AND(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.7
  tmp = x1*w1 + x2*w2
  if tmp <= theta:
    return 0
  elif tmp > theta:
    return 1
    
# NAND GATE
def  NAND(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.7
  tmp = x1*w1 + x2*w2
  if tmp <= theta:
    return 1 ## only change here
  elif tmp > theta:
    return 0 ## only change here
    
# OR GATE
def OR(x1, x2):
  w1, w2, theta = 0.5, 0.5, 0.3 ## only change here
  tmp = x1*w1 + x2*w2
  if tmp <= theta:
    return 0 
  elif tmp > theta:
    return 1

  ㆍ활성함수(Activation Function)

     - 계단함수(Step Function)

# 0보다 큰 경우에 1을 출력하고, 0보다 작을 때 0을 출력하는 계단 함수 구현하기

# 라이브러리 
import numpy as np
import matplotlib.pyplot as plt 
import math 

# 샘플 데이터를 확인합니다. 
x = np.array([-1, 1, 2])
print(x)

# 0보다 큰가?
y = x>0
print(y)

# 논리형태를 0과 1로 표현해보기
y = y.astype(np.int)
print(y)

# 함수 정의
def step_function(x):
  return np.array(x>0, dtype=np.int)
  
# 함수 실행
print(step_function(-1))
print(step_function(0.5))
print(step_function(500000))

# 그래프 그리기
x = np.linspace(-1, 1, 100) 
plt.step(x, step_function(x)) 
plt.show()

 

     - Sigmoid Function

# 함수 정의
def sigmoid(x):
  return 1/ (1+np.exp(-x))

# x값에 따른 출력값의 변화
x = np.array([-5, -1, 0, 0.1, 5, 500000])
print(sigmoid(x))

# 함수 그리기
x = np.linspace(-10, 10, 100) 
  
plt.plot(x, sigmoid(x)) 
plt.xlabel("x") 
plt.ylabel("Sigmoid(X)") 
  
plt.show()

 

     - ReLU(Rectified Linear Unit)

# 함수 정의
z = np.arange(-3, 3, .1)
zero = np.zeros(len(z))
y = np.max([zero, z], axis=0)
# 0과 z값 중 max값 출력; 0이하에서는 0 출력

# 그래프로 그리기
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(z, y)
ax.set_ylim([-1.0, 3.0])
ax.set_xlim([-3.0, 3.0])
#ax.grid(True)
ax.set_xlabel('z')
ax.set_title('ReLU: Rectified linear unit')

plt.show();
fig = plt.gcf()

 

 

■ Reference

  ㆍ다층 퍼셉트론 : https://m.blog.naver.com/samsjang/221030487369

 

[34편] 딥러닝의 기초 - 다층 퍼셉트론(Multi-Layer Perceptron; MLP)

[33편]까지 머신러닝의 기초적인 내용에 대해 거의 모두 다루었으므로, 이번 포스팅부터는 요즘 핫하게 뜨...

blog.naver.com

  ㆍ다양한 신경망 비교(CNN, RNN, MLP, SVM) : https://dbrang.tistory.com/1537

 

Deep Learning(ANN, DNN, CNN, RNN, SLP, MLP) 비교

/* -- Title : Deep Learning(ANN, DNN, CNN, RNN, SLP, MLP) 비교 -- Reference : 구글링, www.analyticsvidhya.com  bbnflow.tistory.com */ ■ Machine Learning vs. Deep Learning ■ ANN(Artificial Neura..

dbrang.tistory.com

  ㆍepoch, batch size, iteration : https://m.blog.naver.com/qbxlvnf11/221449297033

 

머신 러닝 - epoch, batch size, iteration의 의미

- 출처 이번 포스팅의 주제는 텐서플로우나 케라스 등을 사용해서 모델을 만들어 보았으면 다들 아실 용어...

blog.naver.com

  ㆍ딥러닝 : https://youtu.be/C2sqt9pG6K0

  ㆍ인공신경망 개념 : https://youtu.be/PyzBX93icz0