[N311] 퍼셉트론과 인공신경망

쥬쥬스·2023년 2월 14일
0

section3

목록 보기
1/1

퍼셉트론

퍼셉트론(Perceptron) : 신경망을 이루는 가장 기본 단위
→ 다수의 신호를 입력으로 받아 하나의 신호를 출력
→ 입력 값 = 여러 개, 출력 값 = 1개

  1. 가중치-편향 연산 : 가중합
  2. 활성화 함수 : 가중합을 얼마만큼의 신호로 출력?, 비선형성
  • 계단 함수(Step function)
    - 임계값을 넘기면 1, 그렇지 않으면 0
    - 임계값 지점에서 미분 불가능, 나머지 지점에서는 미분값 0 출력
  • 시그모이드 함수(Sigmoid function)
    - 임계값보다 작은 부분은 0에 가까워지고, 큰 부분은 1에 가까워짐
    - 모든 지점에서 미분 가능, 미분값 ≠ 0
    - 시그모이드 함수 중복해서 사용하면 기울기 소실 문제 발생
  • ReLU 함수(ReLU function)(렐루)
    - 은닉층에서 사용하는 가장 많이 쓰는 함수
    - 양의 값이 입력되면 그 값 그대로 출력, 음의 값이면 0 반환
  • 소프트맥스 함수(Softmax function)
    - 다중분류 문제에 적용할 수 있도록 시그모이드를 일반화한 것
    • 모든 클래스의 값이 합이 1이 되는 확률값으로 변환

인공신경망

ANN(Artificial Neural Networks) : 실제 신경계를 모사하여 만들어진 계산 모델, 줄여서 뉴럴넷(Neural-Net)

신경망은 퍼셉트론(Node)을 여러 층으로 쌓아서 만든다.
이렇게 여러 개의 층으로 쌓아 구축한 신경망을 다층 퍼셉트론 신경망(Multi-Layer Perceptron, MLP)라고 한다. 이를 이용해서 XOR 문제를 해결할 수 있다. 단층 퍼셉트론으로는 해결X

신경망(Neural Network)의 기본 구조와 이를 이루는 구성 요소

  • 뉴런(노드)
  • 연결(가중치, 편향)
  • 입력층(Input layer)/은닉층(Hidden layers)/출력층(Output layer)
    - 입력층 : 데이터의 특성에 따라 입력층 노드 결정
    - 은닉층 : 입력층으로부터 입력된 신호가 가중치, 편향과 연산되는 층
    딥러닝이라고 하면 2개 이상의 은닉층을 가진 신경망을 말함
    - 출력층 : 은닉층 연산을 마친 값이 출력되는 층
    • 이진 분류 : 활성화 함수는 시그모이드, 출력층 노드 수는 1, 출력되는 값이 0과 1 사의 확률값
    • 다중 분류 : 활성화 함수는 소프트맥스, 출력층 노드 수는 레이블 클래스 수와 동일하게 설정
    • 회귀 : 일반적으로 활성화 함수 지정X, 출력층 노드 수는 출력값의 특성 수와 동일하게 설정

신경망 모델

1. 모델 구축

  1. Sequntial API
# Sequential API : 레이어를 순차적으로 연결하여 신경망을 구성하는 방법

model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(1, activation='sigmoid')
])
# tf.keras.models.Sequential()을 model로 선언
# .add()를 통해 모델 내 레이어를 추가
# 추가된 레이어는 순차적으로 연산이 진행

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
  1. Functional API
# Functional API
# 각 레이어마다 변수로 선언하고 이를 이용해 신경망을 구성하는 방식입니다.

input = tf.keras.layers.Input(shape=(2,))
output = tf.keras.layers.Dense(1, activation='sigmoid')(input)

model = tf.keras.models.Model(inputs=input, outputs=output)   

2. 모델 compile

  • 옵티마이저, 손실함수, 지표 설정
# .compile() : 신경망을 구성한 다음 신경망의 학습 방법을 결정

model.compile(optimizer='sgd',
              loss='binary_crossentropy',
              metrics=['accuracy']) # 학습 지표를 정확도로 설정

3. 모델 fit

  • 에포크 조정(학습 횟수)
model.fit(X_train, y_train, epochs=30)  

4. 학습한 신경망 모델 사용하여 평가

model.evaluate(X_test, y_test, verbose=2)

🧐 Review

1. 퍼셉트론(Perceptron)이란 무엇일까요?

  • 신경망을 이루는 가장 기본 단위
  • 입력 값 = 여러개, 출력 값 = 1개

2. 다층 퍼셉트론 신경망(Multi-Layer Perceptron)은 무엇이며 단층 퍼셉트론 신경망과 구별되는 장점은 무엇인가요?

  • 다층 퍼셉트론 신경망은 퍼셉트론을 여러 층으로 쌓아서 구축한 신경망이다. 은닉층을 가지고 있으며 단층 퍼셉트론 신경망과 달리 XOR과 같은 문제를 해결할 수 있다. 가중치 매개변수의 적절한 값을 데이터로부터 자동으로 학습하는 능력이 있다는 장점이 있다.

3. 신경망(Neural Network)의 기본 구조와 이를 이루는 구성 요소에 대해 설명해봅시다.

  • 뉴런(노드) : 신경망을 구성하는 하나의 단위

  • 연결(가중치, 편향)

    • 가중치(Weight) : 입력층 데이터를 넘길때 중요도를 조절하는 매개변수
    • 편향(bias) : 노드의 민감도나 활성화를 조절하는 역할
  • 입력층(Input layer)/은닉층(Hidden layers)/출력층(Output layer)

    • 입력층 : 데이터셋이 입력되는 층
    • 은닉층 : 입력된 신호가 가중치, 편향과 연상되는 층
    • 출력층 : 가장 마지막에 은닉층 연산 마친값이 출력되는 층

4. 활성화 함수(Activation Function)는 어떤 역할을 하나요?

  • 비선형성(Non-linearity)을 만들어 주는 구조
  • 가중합을 얼마만틈의 신호로 출력할지 결정해주는 역할

5. 신경망의 학습(Training)은 무엇을 찾기 위한 과정인가요?

  • 신경망의 학습은 적절한 가중치를 찾는 과정이다.

6. 분류/회귀는 각각 언제 쓰나요? 그리고 이에 따라 신경망은 어떻게 설계해야 할까요?

  • 이진 분류, 다중 분류, 회귀에 따라 출력층의 노드 수, 활성화 함수, 손실 함수를 어떻게 설정해야 하는지 알아봅시다.

1) 이진 분류
→ 출력층의 노드 수 : 1개 (0과 1사이의 확률값)
→ 활성화 함수 : 시그모이드 함수
→ 손실 함수 : binary_crossentropy

2) 다중 분류
→ 출력층의 노드 수 : 레이블 클래스 수
→ 활성화 함수 : 소프트맥스
→ 손실 함수 : sparse_categorical_crossentropy(정수형태) / categorical_crossentropy (원핫인코딩 형태)

3) 회귀
→ 출력층의 노드 수 : 출력값의 특성 수
→ 활성화 함수 : X
→ 손실 함수 : MSE

profile
느려도... 꾸준히.....🐌

0개의 댓글