Chapter6. 로지스틱 회귀 모델
1. 정의
> 참(1)과 거짓(0)으로만 표현을 해야하는 자료구조를 표현해야 할 때 사용하는 모델
2. 시그모이드 함수
> 참과 거짓으로 나타낼 수 있도록 S자 형태로 그려지는 그래프

여기서 a는 그래프의 경사도를, b는 그래프의 좌우이동을 담당
3. 교차 엔트로피 오차 함수(손실 함수)
> 로지스틱 회귀 모델의 손실 함수는 교차 엔트로피 오차 함수를 사용(선형 회귀에서는 평균제곱오차를 사용)
1) 공식

> y는 실제값, h는 예측값
2) y가 1인 경우
> -log(h) -> h가 1이면 0, 작아질수록 증가함
3) y가 0인 경우
> -log(1-h) -> h가 0이면 0, 커질수록 증가함
4. 텐서플로를 활용한 로지스틱 회귀 모델
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# 텐서플로 케라스 API
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
x = np.array([2, 4, 6, 8, 10, 12, 14])
y = np.array([0, 0, 0, 1, 1, 1, 1])
model = Sequential()
model.add(Dense(1, input_dim=1, activation='sigmoid')) # 출력값(H(x)), 입력값(x), 활성화 함수(시그모이드)
model.compile(optimizer='sgd', loss='binary_crossentropy') # 옵티마이저(sgd = 경사하강법), 손실 함수(교차 엔트로피)
model.fit(x, y, epochs=1000) # 에포크 설정
# 그래프
plt.scatter(x, y)
plt.plot(x, model.predict(x), 'r')
plt.show()
# 테스트
hour = 7
input_data = tf.constant([[hour]], dtype=tf.float32)
prediction = model.predict(input_data)[0][0]
print("%.0f 시간을 공부할 경우, 합격 예상 확률은 %.1f%% 입니다." % (hour, prediction*100))


Chapter7. 퍼셉트론과 인공지능의 시작
퍼셉트론
> 뉴런의 행동을 모방한 인공 신경망을 실제 장치로 구현한 모델
1) 초기
> 초기 모델은 여러 입력과 가중치들을 가중합으로 합쳐 판단하되 이 가중치들을 조절할 수 있도록 하는 형태
2) 아달라인
> 경사 하강법을 도입해 최적의 경계선을 그리도록 할 수 있는 형태(활성화 함수로 선형회귀를 사용)
3) 로지스틱 회귀
> 활성화 함수를 시그모이드로 사용하는 형태
Chapter8. 다층 퍼셉트론
다층 퍼셉트론
> 퍼셉트론이 해결하지 못한 XOR 문제(비선형 문제)를 해결할 수 있는 개선된 모델
1) 문제점
> 퍼셉트론이 해결할 수 있는 문제는 선형관계만을 해결할 수 있었음.
단순한 XOR 문제를 평면상에서 직선 하나로 구분할 수 없었기 때문에 이에대한 한계점이 발견됨.
2) 해결
> 다층 퍼셉트론은 은닉층을 추가하여 XOR 문제를 기존의 입력층, 두 개의 처리(NAND, OR)를 가진 은닉층, 이를 거쳐 나온 결과를 AND 처리하는 출력층으로 구분함으로써 비선형 문제를 해결할 수 있었음.
3) Python을 활용한 다층 퍼셉트론
import numpy as np
// 가중치와 바이어스
w11 = np.array([-2, -2])
w12 = np.array([2, 2])
w2 = np.array([1, 1])
b1 = 3
b2 = -1
b3 = -1
// 퍼셉트론(w1x1 + w2x2 + b)
def MLP(x, w, b):
y = np.sum(w * x) + b
if y <= 0:
return 0
else:
return 1
// 은닉층
// NAND(가중치 -2, -2, 두 입력이 모두 1일 때만 0)
def NAND(x1, x2):
return MLP(np.array([x1, x2]), w11, b1)
// OR(가중치 2, 2, 두 입력이 모두 0일 때만 0)
def OR(x1, x2):
return MLP(np.array([x1, x2]), w12, b2)
// 출력층
// AND(가중치 1, 1, 두 입력이 모두 1일 때는 1, 0일 때는 0)
def AND(x1, x2):
return MLP(np.array([x1, x2]), w2, b3)
// XOR(비선형)
def XOR(x1, x2):
return AND(NAND(x1, x2), OR(x1, x2))
// 입력층(x1, x2) -> 은닉층(NAND, OR) -> 출력층(AND)
for x in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = XOR(x[0], x[1])
print("입력 값: " + str(x) + "출력 값: " + str(y))

Chapter9. 오차 역전파에서 딥러닝으로
1. 오차 역전파
> 기존의 경사 하강법에서 가중치(기울기)를 조절하며 오차를 최소화 할 수 있던 것처럼, 다층 퍼셉트론에서도 가중치를 수정하는 과정을 말함.
2. 기울기 소실 문제에 따른 활성화 함수 발전
1) 문제점
> 기존 시그모이드 함수를 사용하는 경우 미분 값이 최대 0.25까지라 1보다 작아 계속 곱하게되면 0으로 수렴하게 되어 기울기가 소실되는 문제가 발생함.
2) 렐루(ReLU) 함수
> 렐루 함수는 이러한 문제점을 해결하기 위한 새로운 활성화 함수로써 미분 값을 0보다 작을 때는 0으로, 0보다 클 때는 1로 설정해주는 역할을 함.
> 따라서 기울기가 소실되지 않으므로 입력층까지 올라가며 잘못된 가중치를 모두 수정할 수 있게 됨.
'LMS 7 > 개발일지' 카테고리의 다른 글
| 25.11.10 개발일지 / 딥러닝5 (0) | 2025.11.14 |
|---|---|
| 25.11.09 개발일지 / 딥러닝4 (1) | 2025.11.14 |
| 25.11.05 개발일지 딥러닝2(모두의 딥러닝 개정 4판) (0) | 2025.11.14 |
| 25.11.03 개발일지 / 딥러닝 1(모두의 딥러닝 개정4판) (0) | 2025.11.14 |
| 25.10.30 개발일지 / C++ MFC 프로젝트 5일차 (0) | 2025.11.14 |