본문 바로가기
스터디/혼공학습단 10기 - 자바 & 머신러닝

[혼공학습단] 딥러닝의 세계로 들어가보자

by 찌노오 2023. 8. 15.

 

 

 

 

기본미션

주차 진도 기본 미션
6주차 chapter 07 ch.07(07-1) 확인문제 풀고, 풀이과정 정리하기

 

 

문제 풀이 전 선수 지식

모든 개념을 완벽하게 이해하기엔 딥러닝(deep learning)은 아직도 어려운 편이라 키워드 위주로 정리해보려고 한다.

인공신경망에서 중요한 개념은 아래 3가지라고 생각했다.

 

인공신경망

  • 뇌의 신경망을 모방하여 만들어진 수학적 모델
  • 복잡한 데이터의 패턴을 학습하고 예측함
  • 로지스틱 회귀 모델과 유사한 개념을 공유하지만, 더 복잡한 구조와 다양한 연산을 수행하는데 사용된다.

 

인공신경망의 구조와 주요 개념

출처: wikipedia

 

뉴런 (Neuron): 인공 신경망의 기본 요소로, 입력을 받아 가중치와 편향을 적용한 후 활성화 함수를 통과시켜 출력을 생성한다. 로지스틱 회귀 모델의 뉴런에 해당합니다. 유닛(unit)이라고 부르기도 한다.

층 (Layer): 뉴런의 집합으로, 입력층, 은닉층, 출력층으로 나뉜다. 입력층은 데이터를 받아들이는 역할을 하며, 은닉층은 중간 연산을 수행하고 출력층은 최종 예측 값을 생성한다.

가중치 (Weight): 뉴런의 입력에 곱해지는 값으로, 입력 특성과 연결되며 학습 과정에서 조정된다. 데이터의 중요도를 나타낸다.

 

 

활성화 함수

  • 인공신경망들은 일반적으로 이전 레이어로부터 값을 입력받아 “어떠한 함수”를 통과시킨 후, 그 결과를 다음 레이어로 출력함
  • 이때 “어떠한 함수” 즉 인공신경망의 은닉층(hidden layer)에 사용되는 함수를 활성화 함수라고 함

시그모이드 함수 (Sigmoid Function)

  • 0과 1 사이의 값을 출력하는 S자 형태의 함수, 로지스틱 함수라고도 불린다.
  • 이진 분류 문제에서 출력을 확률 형태로 변환하는데 사용
  • 입력 값이 크면 1에 가까워지고, 작으면 0에 가까워짐

 

ReLU 함수 (Rectified Linear Activation Function)

  • 입력이 양수인 경우에는 그대로 출력하고, 음수인 경우에는 0을 출력하는 함수
  • 입력 값이 0 이상이면 어떤 변화도 없고, 음수인 경우에만 비선형성을 추가하여 학습을 도움
  • 딥러닝에서 가장 많이 사용되고 있음

왜 가장 많이 사용하는가?

  • 시그모이드 함수는 레이어를 거칠수록 값이 현저하게 작아지게 되어 기울기 소실 현상이 발생함
  • 이러한 기울기 소실 현상은 학습과 가중치 업데이트가 제대로 이루어지지 않는 원인이 됨, 즉 모델의 성능이 저하될 수 있다는 말
  • ReLU함수는 심층 신경망에서 역전파 알고리즘을 안정적으로 수행하고, 기울기 소실 문제를 완화할 수 있기 때문에

 

소프트맥스 함수 (Softmax Function)

  • 입력 값의 지수 함수를 사용하여 클래스별 확률을 계산하는 함수
  • 다중 클래스 분류 문제에서 각 클래스에 대한 확률을 계산하여 출력함
  • 출력 값은 합이 1이 되도록 조정됨

하이퍼볼릭 탄젠트 함수 (Hyperbolic Tangent Function, tanh),

  • 시그모이드 함수와 유사한 S자 형태를 가지며, -1과 1 사이의 값을 출력함
  • 입력을 정규화하여 출력하며, 시그모이드와 달리 음수 값에도 반응함

 

matplotlib으로 활성화 함수 그려보기

import numpy as np
import matplotlib.pyplot as plt

# x값 범위 설정
x = np.linspace(-10, 10, 100)

# Sign 함수
sign_y = np.sign(x)

# Tanh 함수
tanh_y = np.tanh(x)

# Sigmoid 함수
sigmoid_y = 1 / (1 + np.exp(-x))

# Softmax 함수
softmax_y = np.exp(x) / np.sum(np.exp(x))

# ReLU 함수
relu_y = np.maximum(0, x)

# 그래프 그리기
plt.figure(figsize=(8, 4))

plt.subplot(231)
plt.plot(x, sign_y)
plt.title('Sign Function')

plt.subplot(232)
plt.plot(x, tanh_y)
plt.title('Tanh Function')

plt.subplot(233)
plt.plot(x, sigmoid_y)
plt.title('Sigmoid Function')

plt.subplot(234)
plt.plot(x, softmax_y)
plt.title('Softmax Function')

plt.subplot(235)
plt.plot(x, relu_y)
plt.title('ReLU Function')

plt.tight_layout()
plt.show()

 

손실함수

  • 머신러닝과 딥러닝 모델에서 학습 과정 중에 모델의 예측값과 실제 타깃값 간의 차이를 측정하는 함수
  • 이 차이를 최소화하는 방향으로 모델의 가중치와 편향을 조정하여 모델을 학습시킴
  • 모델이 얼마나 잘 예측하고 있는지를 평가하고 모델을 개선하는 데 중요한 역할

주요 손실 함수들과 keras에서 사용법까지 정리하면 다음과 같다.

 

평균 제곱 오차 (Mean Squared Error, MSE)

  • 예측값과 실제값 간의 평균 제곱 차이를 계산
  • 회귀 문제에서 널리 사용되며, 오차 제곱의 평균을 구하여 모델의 예측 성능을 평가함
  • 값이 작을수록 모델의 예측이 더 정확함
keras.losses.mean_squared_error(y_true, y_pred)

 

이진 크로스 엔트로피 (Binary Cross-Entropy)

  • 이진 분류 문제에서 사용되며, 실제 타깃값과 모델의 예측값 간의 엔트로피를 계산
  • 이진 분류에서 클래스 별 확률의 차이를 측정하여 모델의 분류 성능을 평가함
  • 값이 작을수록 모델의 예측이 더 정확함
keras.losses.binary_crossentropy(y_true, y_pred)

 

범주형 크로스 엔트로피 (Categorical Cross-Entropy)

  • 다중 클래스 분류 문제에서 사용되며, 실제 타깃값과 모델의 예측값 간의 엔트로피를 계산
  • 다중 클래스 분류에서 각 클래스별 확률의 차이를 측정하여 모델의 분류 성능을 평가함
  • 값이 작을수록 모델의 예측이 더 정확함
keras.losses.categorical_crossentropy(y_true, y_pred)

 

다중 분류 크로스 엔트로피(sparse_categorical_crossentropy)

  • 다중 분류 문제에서 사용되며, 실제 클래스에 대한 확률을 계산하고 이를 비교하여 손실을 계산
  • 타깃 레이블을 정수로 표한고 원-핫 인코딩으로 변환하지 않아도 되는 장점을 가지고 있
keras.losses.sparse_categorical_crossentropy(y_true, y_pred)

 

확인 문제 풀이

 


1. 어떤 인공 신경망의 입력 특성이 100개이고 밀집층에 있는 뉴런 개수가 10개일 때 필요한 모델 파라미터의 개수는 몇 개인가요?

① 1,000개
② 1,001개
③ 1,010개
④ 1,100개

 

정답 : ③ 1,010개

 

모델 파라미터의 개수는 밀집층의 각 뉴런의 입력 특성마다 하나의 가중치와 하나의 편향(bias) 혹은 절편이 필요하다.

따라서 입력특성이 100개이고, 뉴런 개수가 10개라면,

각 뉴런 마다 100개의 가중치와 하나의 편향을 값을 더해서 (가중치 파라미터 수 + 1)  * 뉴런 개수 =  (100+1)*10 = 1,010개가 된다.

 


2. 케라스의 Dense 클래스를 사용해 신경망의 출력층을 만들려고 합니다. 이 신경망이 이진 분류 모델이라면 activation 매개변수에 어떤 활성화 함수를 지정해야 하나요?

① 'binary'
② 'sigmoid'
③ 'softmax'
④ 'relu'

 

정답 : ② 'sigmoid'

 

이진 분류 모델에서는 일반적으로 시그모이드 활성화 함수가 사용된다.

0과 1사이 값을 출력하며, 확률 값을 나타내거나 결정임계값을 기준으로 클래스를 분류하는 데 사용된다.

앞서 배웠던 로지스틱 회귀 모델에 사용되었던 활성화 함수이다.

 

 


3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?

① configure()
② fit()
③ set()
④ compile()

 

정답: ④ compile()

 

keras에서 손실 함수의 종류와 측정지표를 설정하는 메서드는 compile()이다.

다음과 같은 파라미터를 설정할 수 있다.

  • loss: 모델의 손실 함수를 지정한다. 손실 함수는 모델의 학습 중에 최소화되어야 할 대상이다.
  • optimizer: 최적화 알고리즘을 선택한다. 이 알고리즘은 손실 함수를 최소화하기 위해 모델의 파라미터를 업데이트하는 데 사용된다.
  • metrics: 모델의 성능을 측정하는 지표를 지정한다. 예를 들어, 정확도(Accuracy)와 같은 지표를 선택할 수 있다.

 


4. 정수 레이블을 타깃으로 가지는 다중 분류 문제일 때 케라스 모델의 compile() 메서드에 지정할 손실 함수로 적절한 것은 무엇인가요?

① 'sparse_categorical_crossentropy'
② 'categorical_crossentropy'
③ 'binary_crossentropy'
④ 'mean_square_error'

 

정답 : ① 'sparse_categorical_crossentropy'

다중 분류 문제에서 사용되는 함수이며, 타깃 레이블이 정수 형태로 주어질 때 사용된다.

 

② 'categorical_crossentropy': 다중 분류 문제에서 사용되며, 타깃 레이블이 원-핫 인코딩(One-Hot Encoding) 형태로 주어질 때 사용된다. 클래스 간의 상호 배타적인 관계를 가정한다.

③ 'binary_crossentropy': 주로 이진 분류 문제에서 사용되며, 두 개의 클래스를 구분하는 모델에 적합하다. 분류별로 확률 값을 계산하고, 이진 분류에 적합한 손실을 계산한다.

④ 'mean_square_error': 회귀 문제에서 사용되며, 실제 값과 예측 값 사이의 평균 제곱 오차를 계산하여 모델을 평가한다. 연속적인 출력 값을 다룰 때 유용하다.

 

 

References

https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.RandomState.html

https://keras.io/ko/losses/#_2

https://ko.wikipedia.org/wiki/%EC%9D%B8%EA%B3%B5_%EC%8B%A0%EA%B2%BD%EB%A7%9D

https://brunch.co.kr/@gdhan/6

 

 

** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!

반응형

댓글