Pytorch로 시작하는 딥러닝 입문(04-03. nn.Module 로지스틱 회귀 구현하기)

2024. 2. 27. 11:29딥러닝 모델: 파이토치

선형 회귀모델의 가설식은 H(x) = Wx+b 이다. nn.Linear( )를 이용해서 이 가설식을 구현할 수 있다. 

로지스틱 회귀의 가설식은 H(x) = sigmoid(Wx+b) 이고, 파이토치에서는 nn.Sigmoid( )를 이용해서 시그모이드 함수를 구현하므로 결과적으로 nn.Linear( )의 결과를 nn.Sigmoid( )를 거치게 하면 로지스틱 회귀의 가설이 된다. 

♣  nn.Linear와 nn.Sigmoid로 로지스틱 회귀 구현하기

1. 훈련 데이터를 텐서로 선언하기

 

2. nn.Sequential을 이용하여 로지스틱 회귀 구현하기

nn.Sequential( )은 nn.Module 층을 차례로 쌓을 수 있도록 한다. 뒤에서는 이를 이용하여 인공신경망을 구현한다. 

nn.Sequential( )은 Wx+b와 같은 수식과 시그모이드 함수 등과 같은 여러 함수들을 연결하는 역할을 한다. 

이를 이용해서 로지스틱 회귀를 구현해보자. 

 

현재 W와 b는 랜덤 초기화된 상태이다. 이 상태에서 훈련 데이터를 넣어 예측값을 확인해보자

 

6×1 크기의 예측값 텐서가 출력된다. 하지만 현재 W와 b는 임의의 값이므로 현재의 예측은 의미가 없다. 

이제 경사하강법을 사용하여 훈련해보자. 총 100번의 epoch를 수행한다. 

 

 

이제 기존의 훈련 데이터를 입력하여 예측값을 확인하자. 

0.5를 넘으면 True, 그보다 낮으면 False로 간주하는데 실제 y_train 값이 [[0], [0], [0], [1], [1], [1]] 이고, 이는 False, False, False, True, True, True에 해당하므로 전부 실제값과 일치하도록 예측했다는 것을 알 수 있다. 

 

훈련 후의 W와 b의 값을 출력해보자.

이 앞 챕터에서 nn.Module을 사용하지 않고 로지스틱 회귀를 구현한 실습에서 얻었던 W, b와 유사하다. 

 

 

♣ 인공신경망으로 표현되는 로지스틱 회귀

 

로지스틱 회귀는 인공신경망으로 간주할 수 있다. 

위의 인공신경망 그림을 보면 각 화살표는 입력과 곱해지는 가중치 또는 편향이다. 각 입력에 대해 검은색 화살표는 가중치가, 회색 화살표는 편향이 곱해진다. 각 입력 x는 각 가중치 s와 곱해지고, 편향 b는 상수 1과 곱해지는 것으로 표현되었다. 

그리고 출력하기 전에 시그모이드 함수를 지나게 된다. 

 

결과적으로 위의 인공신경망은 다음과 같은 다중 로지스틱 회귀를 표현한다. 

 * 시그모이드 함수는 인공신경망의 은닉층에서는 거의 사용되지 않는다.