본문 바로가기
Programming 개발은 구글로/기타 정보

[WEB+AI] 28일차 딥러닝 2/2

by 40대직장인 2024. 11. 20.

딥러닝

 

강사: 이숙번님

 

 

1. Hidden Layer(은닉층)

  : 입력 데이터를 다양한 방식으로 가공하고 변경해서 의미를 만들어내는 역활

  - 입력과 출력 사이에 있는 중간 단계

  - 단순한 입력/출력만으로는 풀 수 없는 복잡한 문제를 해결하기 위해 필요함.

  - 데이터를 가공하고, 중요한 특징을 추출하며, 비선형 관계를 학습할 수 있도록 하기 위해 필요함.

  - 결과적으로 더 정확하고 유연한 모델을 만들기 위해 은닉층이 필요함.

 

 

 

Hidden Layer - 5개의 특징(특징 자동 추출기)

 


예시: 고양이 사진 인식

  • 입력: 픽셀 데이터 (이미지의 숫자 값들)
  • 은닉층 역할:
    • 1번째 은닉층: "이 부분은 선처럼 보인다"를 학습.
    • 2번째 은닉층: "여기에는 둥근 모양이 있다"를 학습.
    • 3번째 은닉층: "귀, 눈, 코의 위치가 고양이처럼 보인다"를 학습.
  • 출력: "이건 고양이다."

이처럼 단순한 데이터에서부터 점점 복잡한 특징을 자동으로 뽑아내는 과정이 은닉층을 통해 이루어집니다.


 

import pandas as pd
import tensorflow as tf

url = 'https://raw.githubusercontent.com/blackdew/tensorflow1/refs/heads/master/csv/iris.csv'
df = pd.read_csv(url)
df_onehot = pd.get_dummies(df)
print(df_onehot.columns)
x_train = df_onehot[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
y_train = df_onehot[['품종_setosa', '품종_versicolor', '품종_virginica']]
print(x_train.shape, y_train.shape)

X = tf.keras.Input(shape=[4])
H = tf.keras.layers.Dense(8, activation="relu")(X) # Hidden layer 추가
H = tf.keras.layers.Dense(8, activation="relu")(H) # Hidden layer 추가
H = tf.keras.layers.Dense(8, activation="relu")(H) # Hidden layer 추가
Y = tf.keras.layers.Dense(3, activation="softmax")(H)
model = tf.keras.Model(X, Y)
model.compile(loss="categorical_crossentropy", metrics=["accuracy"])
model.summary()

 

  - metrics 추가

model.compile(loss="mse", metrics=[tf.keras.metrics.R2Score()])

model.compile(loss="categorical_crossentropy", metrics=["accuracy", tf.keras.metrics.AUC])

 

 

2. 이미지 학습

 

 

 

 

 2.1. 딥러닝 - 손글씨 분류 모델

 

import tensorflow as tf

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)   

# 결과
(60000, 28, 28) (60000,)
(10000, 28, 28) (10000,)

 

 

import matplotlib.pyplot as plt

print("정답: ", y_train[1])
plt.imshow(x_train[0], cmap='gray')
plt.show()

 

 

import pandas as pd

pd.set_option('display.max_columns', None)
pd.DataFrame(x_train[1])

 

 

 

  - reshape를 사용하여 한 줄의 표의 형태로 만듬.

 

  - reshape 사용

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
print(a.shape)

a = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]])
print(a.shape)

a = np.array([[0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11]])
print(a.shape)

a = np.array(
    [
        [0, 1],
        [2, 3],
        [4, 5],
        [6, 7],
        [8, 9],
        [10, 11]
    ]
)
print(a.shape)

# 결과
(12,)
(1, 12)
(12, 1)
(6, 2)

 

 

a = a.reshape(3, 2, 2) # 2행 2열 3개
print(a)

a = a.reshape(2, 3, 2) # 3행 2열 2개
print(a)

# 결과
[[[ 0  1]
  [ 2  3]]

 [[ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]]]
  
[[[ 0  1]
  [ 2  3]
  [ 4  5]]

 [[ 6  7]
  [ 8  9]
  [10 11]]]

 

 

import tensorflow as tf
import pandas as pd

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)   

x_train = x_train.reshape(60000, 784)
# y_train = pd.get_dummies(y_train)
y_train = tf.keras.utils.to_categorical(y_train) # 텐서플로우의 원핫인코딩 함수
print(x_train.shape, y_train.shape)

# 결과
(60000, 28, 28) (60000,)
(10000, 28, 28) (10000,)
(60000, 784) (60000, 10)

 

  • 원래 y_train은 숫자 레이블(0, 1, 2, ..., 9)로 되어 있음.
  • 숫자 레이블을 바로 처리하지 못하기 때문에 원핫인코딩으로 변환해야함.

 

pd.DataFrame(y_train)

 

 

X = tf.keras.Input(shape=[784])
Y = tf.keras.layers.Dense(10, activation='softmax')(X)
model = tf.keras.Model(X, Y)
model.compile(loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10)

 

3. Linear Regression, Logistic Regression

 3.1. Linear Regression(선형 회귀)

 

 

 3.2. Logistic Regression(로지스틱 회귀)

 

 

  - 최적의 그래프를 찾는 방법

    a. 모델 결과와 각 데이터의 오차를 구한다.

    b. 오차를 모두 더한다.

    c. 오차의 합이 최소가 되게 한다.

 

 3.3. 선형회귀와 최소제곱 추정

 

 

 3.4. 선형회귀와 최소제곱합

  • SST: Y의 평균값으로 설명할 수 없는 분산
  • SSR: SST 중 선형회귀식을 통해 얼마나 설명해낸 분산 
  • SSE: 선형회귀식이 설명할 수 없는 분산

 

 3.5. 로지스틱 회귀와 크로스 엔트로피

 

 

 

  - 크로스 엔트로피(Cross Entropy)는 분류 문제에서 모델의 예측이 얼마나 정확한지 평가하기 위해 사용하는 손실 함수(loss function)입니다.

 

  - 모델의 예측 확률이 실제 정답과 얼마나 가까운지를 측정.

 

  - 크로스 엔트로피 공식

 

  • : 클래스 개수 (예: 고양이, 강아지, 새 → C=)
  • yi: 실제 정답 (One-Hot Encoding으로 표현, 정답 클래스는 1, 나머지는 0)
  • : 모델이 예측한 확률 값

 

 

  - 예시

 

 3.6. Perceptron

 

 3.7. 인공신경망

  : Perceptron이 모여 Layer를 이루는 것

 

  -> X와 Y사이에 특정 함수가 존재 한다면, Multi Layer는 인공신경망이 어떤 함수든 근사(Approximate)할 수 있다.

 

 3.8. Computer

  • 컴퓨터는 논리 Gate들의 연결을 통해 구성
  • Not, And, Or Gate를 쌓아 연산을 만듬
  • Nand Gate를 쌓아 Not, And, Or Gate를 만듬.
  • Nand만으로 컴퓨터를 완성할 수 있음.
  • Nand Gate는 Universal Gate라고도 불림.

 

 

 

 

 

 

4. Optimizer

< 출처: 허용호, 자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다. >

 

 

  - GD(Gradient Descent, 경사하강법)

    : 함수의 기울기(경사)를 구하여 함수의 극값에 이를 때까지 기울기가 낮은 쪽으로 반복하여 이동하는 방법

  • 알파 값은 learning rate이다.

 

  - Momentum(관성)

    : 이전에 이동했던 방향을 기억해서 다음 이동의 방향에 반영

 

  - Adagrad(Adaptive Gradient)

    : 많이 이동한 변수(w)는 최적값에 근접했을 것이라는 가정하에, 많이 이동한 변수(w)를 기억해서 다음 이동의 거리를 줄인다.

 

  - Adam(RMSprop + Momentum)

    : Adagrad 업그레이드인 RMSprop와 Momentum을 합침.

 

 

 

  - Vanishing Gradient 를 해결하기 위해 relu 를 사용한다.

 

 

  - sigmoid, tanh의 미분 함수로 0.25/0.5 보다 작은 값이 중첩되어 곱해지면서 미분값이 0에 수렴하게 된다. 

 

 

5. Activation(활성화 함수)

 

 5.1. Loss Function

 

 

  - softmax

 

# w * x + w * x + w * x + ... + + b
y1 = 2 ** 200
y2 = 2 ** 20
y3 = 2 ** -10

S = y1 + y2 + y3
y11 = y1 / S
y22 = y2 / S
y33 = y3 / S
print(y11, y22, y33)

# 결과
1.0 6.525304467998525e-55 6.077163357286271e-64

 

 


출처: AI Hub 교육과정 - WEB+AI (위 내용이 문제가 된다면 댓글에 남겨주세요. 바로 삭제조치하도록 하겠습니다.)

 

 

 

 

댓글