간혹 건강검진을 받을 때 예(참), 아니오(거짓)로만 대답해야 할 때가 있다.
그때 확실하게 고를 수 있는 문항도 있지만 아닐 때는 정말 골치가 아프다.
이와 같은 과정이 전달받은 정보를 놓고 참과 거짓 중에 하나를 판단해 다음 단계로 넘기는 장치들이 딥러닝 내부에서 쉬지 않고 작동한다!
이렇게 참, 거짓 중에 하나를 내놓는 과정은 로지스틱 회귀의 원리를 거쳐 이루어진다.
참인지 거짓인지를 구분하는 로지스틱 회귀의 원리를 이용해 '참, 거짓 판단 장치'를 만들어 주어진 입력 값의 특징을 추출하고 이를 저장해 '모델'을 만든다. 그런 다음 누군가 비슷한 질문(문항)을 해도 만들어 놓은 이 모델을 꺼내 답을 하는 것이 바로 딥러닝의 동작 원리!!
로지스틱 회귀는 선형 회귀와 마찬가지로 적절한 선을 그려가는 과정이다.
다만, 직선이 아니라 참(1)과 거짓(0)을 구분하는 S자 형태의 선을 그어 주는 작업인데
이러한 S자 형태로 그려지는 함수가 있다. 바로 시그모이드 함수!

e는 자연 상수라고 불리는 무리수이므로 파이처럼 고정된 값이여서 구해야 하는 값은 Bx이다.
여기서는 ax+b가 아닌 Bx를 사용했는데 a=> B, b=0으로 가정했을 뿐이다.
B는 그래프의 경사도를 결정하며 B가 커질수록 경사도가 높아져 계단 모양의 함수로 보여진다!
그러면 이제 a와 b의 값을 구해야 하는데 이 시그모이드 함수에서는 아까 배운 것처럼 경사 하강법을 사용하면 된다!
경사 하강법은 오차를 구한 후 다음 오차를 작은 쪽으로 이동시키는 방법이라고 했는데 그렇다면 예측 값과 실제 값의 차이(=오차)를 구하는 공식이 필요하다.
시그모이드 함수의 특징은 y값이 0과 1사이라는 점이다. 즉 실제 값이 1일 때 예측 값이 0에 가까워 질수록 오차가 커진다는 것(반대의 경우도 마찬가지다).
이를 공식으로 만들 수 있게 해 주는 함수가 바로 로그 함수!

위 그림은 y = 0.5에 대칭하는 두 개의 로그 함수이다.(가로 축 = 예측값, 세로 축 = 오차)
파란색 선은 실제 값이 1일 때 사용할 수 있는 그래프 = > y = -log h
빨간색 선은 실제 값이 0일 때 사용할 수 있는 그래프다. = > y = -log(1-h)
y의 실제 값이 1일 때 -log h 그래프를 쓰고, 0일 때 -log(1-h) 그래프를 써야 하는데
이는 다음과 같은 방법으로 해결할 수 있다!
- {ylog h + (1-y)log(1-h)}
실제 값 y가 1이면 -ylog h가 되고 0이면 -log(1-h)가 된다.
따라서 y 값에 따라 원하는 그래프를 각각 사용할수 있게 된다!
이를 그대로 텐서플로로 옮겨 보자!


주어진 데이터를 가지고 x_data(예측 값들), y_data(실제 값들)으로 나눠서
tf.random_normal함수를 통해 난수를 생성한다음 시그모이드 함수를 직접 만들어서
거기에 맞춰 오차를 정해주고 학습률을 정한 다음
tf.train.GradientDescentOptimizer를 통해 평균 제곱근 오차를 최소로 하는 값을 gradient_decent라는 변수로 정해준 다음
with tf.Session() as sess라는 컨텍스트 매니저를 통해 시작점을 얘기하고 sess.run(tf.global_variables_initializer())를 통해 변수들을 초기화시킨다.
그 다음 그에 맞는 epoch, 원하는 변수들 (loss, a(기울기), b(y절편))을 sess.run(gradient_decent)를 통해 뽑아서 딥러닝을 실행한다!
사실 시그모이드 함수를 뒤에 배울 활성화 함수로 정해두는 편한 방법이 있는데 이 장에서는 시그모이드라는 함수를 직접 만들어 보면서 딥러닝의 기초를 직접 경험하기 위해 이렇게 함수를 정해두었다!
방금은 입력 값이 각각 하나인 로지스틱 회귀에 대해 배워봤고 이전에 선형 회귀에서 말한 것처럼 변수가 많아야 예측이 많아진다. 그럼 이번에는 여러 입력 값을 갖는 로지스틱 회귀를 Numpy와 Tensorflow로 설명해보자!


확실히 변수가 많다보니 단순 로지스틱 회귀를 설명할때보다 모르는 부분이 많아 자세히 설명한 부분이 많다..
특히 이 파트에서 많은 검색을 통해 얻는 지식으로 딥러닝에 조금 가까워 진 것같다고 생각한 경험이 있다!
다음 장은 딥러닝의 기초, 퍼셉트론에 대해 설명하겠다!!
'딥러닝' 카테고리의 다른 글
모두의 딥러닝 (6) - 오차 역전파 (0) | 2019.12.24 |
---|---|
모두의 딥러닝 (5) - 퍼셉트론 (0) | 2019.12.23 |
모두의 딥러닝 (3) - 오차 수정하기 : 경사 하강법 (0) | 2019.12.23 |
모두의 딥러닝 (2) - 가장 훌륭한 예측선 긋기: 선형 회귀 (0) | 2019.12.21 |
모두의 딥러닝 (1) - 처음 해보는 딥러닝 (0) | 2019.10.10 |