기본미션
주차 | 진도 | 기본 미션 |
6주차 | chapter 07 | ch.07(07-1) 확인문제 풀고, 풀이과정 정리하기 |
문제 풀이 전 선수 지식
모든 개념을 완벽하게 이해하기엔 딥러닝(deep learning)은 아직도 어려운 편이라 키워드 위주로 정리해보려고 한다.
인공신경망에서 중요한 개념은 아래 3가지라고 생각했다.
인공신경망
- 뇌의 신경망을 모방하여 만들어진 수학적 모델
- 복잡한 데이터의 패턴을 학습하고 예측함
- 로지스틱 회귀 모델과 유사한 개념을 공유하지만, 더 복잡한 구조와 다양한 연산을 수행하는데 사용된다.
인공신경망의 구조와 주요 개념
뉴런 (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
** 사실과 다른 내용이 있을 수 있습니다. 언제든지 피드백 부탁드립니다!
'스터디 > 혼공학습단 10기 - 자바 & 머신러닝' 카테고리의 다른 글
[혼공학습단] 입력스트림 요약 정리 하기 (0) | 2023.08.20 |
---|---|
[혼공학습단] 딥러닝을 좀 더 딥하게 가보자, 심층 신경망 (0) | 2023.08.15 |
[혼공학습단] 차원의 저주를 풀기 위한 주성분 분석(PCA) (0) | 2023.08.12 |
[혼공학습단] k-평균 알고리즘의 작동방식 (0) | 2023.08.12 |
[혼공학습단 ] HashMap으로 Map컬렉션을 이해하기 (0) | 2023.08.12 |
댓글