나랑 now

[혼공머신] 6주차_딥러닝을 시작합니다 본문

혼공학습단/혼공머신

[혼공머신] 6주차_딥러닝을 시작합니다

nowj8n 2024. 2. 16. 21:01
반응형
# 진도 기본 미션 선택 미션
1주차
(1/2 ~ 1/7)
Chapter 01 ~ 02 코랩 실습 화면 캡처하기 Ch.02(02-1) 확인 문제 풀고, 풀이 과정 정리하기
2주차
(1/8 ~ 1/14)
Chapter 03 Ch.03(03-1) 2번 문제 출력 그래프 인증하기 모델 파라미터에 대해 설명하기
3주차
(1/15 ~ 1/21)
Chapter 04 Ch.04(04-1) 2번 문제 풀고, 풀이 과정 설명하기 Ch.04(04-2) 과대적합/과소적합 손코딩 코랩 화면 캡처하기
4주차
(1/22 ~ 1/28)
Chapter 05 교차 검증을 그림으로 설명하기 Ch.05(05-3) 앙상블 모델 손코딩 코랩 화면 인증하기
5주차
(1/29 ~ 2/4)
Chapter 06 k-평균 알고리즘 작동 방식 설명하기 Ch.06(06-3) 확인 문제 풀고, 풀이 과정 정리하기
6주차
(2/5 ~ 2/12)
Chapter 07 Ch.07(07-1) 확인 문제 풀고, 풀이 과정 정리하기 Ch.07(07-2) 확인 문제 풀고, 풀이 과정 정리하기

 

 

 

퍼셉트론Perceptron(단층 퍼셉트론Single-Layer Perceptron)

퍼셉트론은 다수의 입력값을 받아 하나의 신호로 출력하는 분류기로서, 입력값들의 위치를 입력층, 최종 값인 출력이 이뤄지는 단계를 출력층이라고 한다.

퍼셉트론 수식

퍼셉트론의 수식을 보면 입력 신호(X)에 가중치(W)를 곱하고 편향(B)를 더한 값에 따라 출력을 다르게 하는 것으로 이해할 수 있다.

다층 퍼셉트론Multi-Layer Perceptron)

단층 퍼셉트론의 층을 쌓은 것으로, 구현 불가능했던 것을 층을 늘려 구현할 수 있다. 입력층과 출력층 사이의 층들은 다수가 될 수 있으며, 이를 은닉층이라고 한다.

다층 퍼셉트론

심층 신경망Deep Neural Network, DNN과 딥 러닝Deep Learning

은닉층이 2개 이상인 신경망을 심층 신경망이라고 하며, 학습 시키는 신경망이 심층 신경망일 경우 이를 딥 러닝이라고 한다.

 

활성화 함수Activation Function

각 층에서의 선형 방정식 계산 결과, 출력값을 조절하는 것을 활성화함수라고 한다.

활성화함수에는 대표적으로 '계단step 함수', '시그모이드sigmoid 함수', '소프트맥스softmax 함수', '렐루ReLU 함수' 등이 있으며, 출력층에 사용하는 활성화함수에는 이진 분류의 경우 시그모이드 함수를, 다중 분류일 경우 소프트맥스 함수를 사용한다. 은닉층에서 사용하는 활성화함수는 출력층에 비해 자유로우며 보통 시그모이드와 렐루 함수 등을 사용한다.

 

계단 함수

def step_function(x):
  return np.array(x>0, dtype=int)

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1)
plt.show()

계단함수

시그모이드 함수

def sigmoid(x):
  return 1/(1+np.exp(-x))

x = np.arange(-5.0, 5.0, 0.1)
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1, 1.1)
plt.show()

시그모이드 함수

ReLU 함수

def relu(x):
  return np.maximum(0, x)

x = np.arange(-5.0, 5.0, 0.1)
y = relu(x)
plt.plot(x, y)
plt.ylim(-0.1, 5.1)
plt.show()

 

ReLU 함수

우리는 이미 위 퍼셉트론을 만드는 과정에서 활성화 함수로 계단 함수를 사용했다. 위에서 사용한 퍼셉트론의 수식을 변경하자면 다음과 같은 두 가지 함수로 나눠볼 수 있다.

퍼셉트론의 구조를 두 함수의 합성함수라고 생각한다면 다음과 같이 표현할 수 있다.

활성화 함수는 흔히 인공신경망 그림에서 각 층에 포함되어있다고 간주한다. 따라서 계단함수가 적용된 단층 퍼셉트론의 구조도는 다음과 같다.

 

손실함수

훈련 데이터를 학습한 모델의 예측값과 실제값의 차이들을 통해 신경망의 성능의 '나쁨'을 나타내는 지표로, 후에 해당 오차를 바탕으로 옵티마이저를 활용해 역전파를 진행하여 학습된 매개변수를 업데이트하게 된다. 해당 과정을 반복하여 오차가 최소인 값을 찾는 것이 딥 러닝 모델 학습의 프로세스가 된다. 따라서 모델을 학습하기 전에 어떤 손실함수를 써야할지 설정해야 한다.

기본적으로 분류 모델의 경우 '크로스 엔트로피cross entropy error(CEE)'를, 회귀 모델의 경우 '오차제곱합sum of squares for error(SSE)'를 이용한다. 분류 문제 중에서 케라스에서 설정 가능한 손실 함수로는 이진 분류의 경우 'binary_crossentropy'를, 다중 분류의 경우 'categorical_crossentropy'가 있으며 이때 타깃 값은 원-핫 인코딩(one-hot encoding)으로 변환되어야 하지만, 텐서플로에서는 타깃값을 원-핫 인코딩으로 변환하지 않은 정수 타깃값을 이용해 크로스 엔트로피 손실을 계산할 수 있는데 그때의 손실함수는 'sparse_categorical_crossentropy'를 사용하게 된다.

 

원-핫 인코딩

출력에서 타깃값에 해당하는 클래스를 1로, 나머지 클래스는 모두 0인 배열

원-핫 인코딩

 

크로스 엔트로피 오차cross entropy error, CEE

크로스 엔트로피 오차 수식

타깃에 해당하는 인덱스의 원소가 1이고 나머지는 0이므로, 크로스 엔트로피 오차를 통해 구해지는 값은 logy_{k}의 값을 구해서 각 유닛의 값을 모두 더한 것과 같아짐

def cross_entropy_error(y, t):
  delta = 1e-7	# log함수에 0을 입력하면 마이너스 무한대가 되기 때문에 0이 입력되지 않도록 하기 위한 상수
  return -np.sum(t * np.log(y + delta))

 

오차제곱합sum of squares for error, SSE

 

오차제곱합 수식

def sum_squares_error(y, t):
  return 0.5*np.sum((y-t)**2)

 

옵티마이저optimizer

신경망의 가중치를 업데이트하는 알고리즘

가중치 업데이트를 위하여 

https://wikidocs.net/152765

 

 


 

기본 미션

Ch.07(07-1) 확인 문제 풀고, 풀이 과정 정리하기

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

정답: (3) 1,010개

모델 파라미터 개수 = (입력 특성 * 뉴런 개수) + 각 뉴런당 절편 개수(뉴런 개수) = 100*10 + 10

 

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

정답: (2) 'sigmoid'

활성함수의 종류에는 'sigmoid', 'softmax', 'relu', 'tanh' 등이 있으며, 분류 문제에서 이진 분류일 경우 'sigmoid', 다중 분류일 경우 'softmax'를 사용

3. 케라스 모델에서 손실 함수와 측정 지표 등을 지정하는 메서드는 무엇인가요?
(1) configure()
(2) fit()
(3) set()
(4) compile()

정답: (4) compile()

(1) configure()와 (3) set()이라는 메서드는 케라스 내에 없으며, (2) fit()은 모델을 훈련할 때 사용하는 메서드이다.

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

정답: (1) 'sparse_categorical_crossentropy'

학습된 모델의 출력에 따른 성능 평가를 위해서는 손실 함수를 사용하며, (1) 'sparse_categorical_crossentropy'는 타깃값이 정수인 다중 분류의 문제, (2) 'categorical_crossentropy'는 원-핫 인코딩이 된 다중 분류 문제에 사용한다. (3) 'binary_crossentropy' 역시 원-핫 인코딩이 된 이중 분류 문제에, 그리고 (4) 'mean_square_error'는 회귀 문제에 사용한다.

 

선택 미션

Ch.07(07-2) 확인 문제 풀고, 풀이 과정 정리하기

1. 다음 중 모델의 add() 메서드 사용법이 올바른 것은 어떤 것인가요?
(1) model.add(keras.layers.Dense)
(2) model.add(keras.layers.Dense(10, activation='relu'))
(3) model.add(keras.layers.Dense, 10, activation='relu')
(4) model.add(keras.layers.Dense)(10, activation='relu')

정답: (2)

add() 메서드에는 층의 객체를 전달해야 한다.

2. 크기가 300 x 300인 입력을 케라스 층으로 펼치려고 합니다. 다음 중 어떤 층을 사용해야 하나요?
(1) Plate
(2) Flatten
(3) Normalize
(4) Dense

정답: (2)

이미지의 각 픽셀에 대해 딥러닝 기법을 사용하기 위해서는 배열 계산을 위해 1차원으로 펼쳐야 한다. 넘파이의 reshape() 메서드처럼 케라스에서는 하나의 층으로 Flatten 클래스를 추가하게 되면 수행된다.

3. 다음 중에서 이미지 분류를 위한 심층 신경망에 널리 사용되는 케라스의 활성화 함수는 무엇인가요?
(1) linear
(2) sigmoid
(3) relu
(4) tanh

정답: (3) relu

(1) linear는 선형 활성화 함수이며, (2) sigmoid는 로지스틱 함수 또는 시그모이드 함수를 나타낸다. (4) tanh은 순환 신경망에서 자주 사용된다.

4. 다음 중 적응적 학습률을 사용하지 않는 옵티마이저는 무엇인가요?
(1) SGD
(2) Adagrad
(3) RMSprop
(4) Adam

정답: (1) SGD

(2) Adagrad, (3) RMSprop, (4) Adam은 적응적 학습률 옵티마이저이다.

 

참고:

밑바닥부터 시작하는 딥러닝, 사이토 고키, 개앞맵시, 한빛미디어, 2017(https://product.kyobobook.co.kr/detail/S000001057805)

https://compmath.korea.ac.kr/deeplearning/

https://80000coding.oopy.io/2470b1c3-c280-4ad6-88ce-b649c2ba2196

http://dmqm.korea.ac.kr/activity/seminar/326

https://wikidocs.net/152765

 

반응형