시그모이드sigmoid 오차함수의 편미분

Epsilon·2022년 9월 20일
0
post-thumbnail
post-custom-banner

시그모이드 함수


sigmoid(x)=\text{sigmoid}(x)= 11+e(ax+b)\displaystyle\frac{1}{1+e^{-(ax+b)}}

변수 a에 따른 그래프의 변화

변수 b에 따른 그래프의 변화

표준오차함수와 오차함수의 편미분


표준오차함수

시그모이드 함수를 p=11+e(ax+b)p = \displaystyle\frac{1}{1+e^{-(ax+b)}} 라 하면 표준오차함수는

CE(a,b)=1n{ylogp+(1y)log(1p)}CE(a, b) =-\displaystyle\frac{1}{n}\sum \{ y \log{p}+(1-y)\log{(1-p)}\}

표준오차함수의 편미분

a로 편미분

a==1nx(yp)\displaystyle{\frac{\partial{}}{\partial{a}}=}=-\frac{1}{n}\sum x(y-p)

과정

  • CE(a,b)=1n[ylog{1+e(ax+b)}+(1y)log{1+e(ax+b)}]CE(a,b)=\displaystyle\frac{1}{n}\sum [ y\log\{1+e^{-(ax+b)}\}+(1-y)\log{\{ 1+e^{(ax+b)}\}]}이므로

  • aCE=1n{yxe(ax+b)1+e(ax+b)+(1y)xe(ax+b)1+e(ax+b)}\displaystyle\frac{\partial{}}{\partial{a}}CE=\frac{1}{n}\sum \Big\{ y\frac{-xe^{-(ax+b)}}{1+e^{-(ax+b)}}+(1-y)\frac{x e^{(ax+b)}}{1+e^{(ax+b)}} \Big\}

    aCE=1n{xype(ax+b)+(1y)xp}\displaystyle\phantom{\frac{\partial{}}{\partial{a}}CE}=\frac{1}{n}\sum\{-xype^{-(ax+b)}+(1-y)xp\}

    aCE=1n{xyh(1+e(ax+b))+xp}\displaystyle\phantom{\frac{\partial{}}{\partial{a}}CE}=\frac{1}{n}\sum\{-xyh(1+e^{-(ax+b)})+xp\}

    aCE=1n{xyp(1+e(ax+b))+xp}\displaystyle\phantom{\frac{\partial{}}{\partial{a}}CE}=\frac{1}{n}\sum\{-xy\cancel{p}\cancel{(1+e^{-(ax+b)})}+xp\}

    aCE=1nx(yp)\displaystyle\phantom{\frac{\partial{}}{\partial{a}}CE}=-\frac{1}{n}\sum x(y-p)

b로 편미분

bCE=1n(yp)\displaystyle\frac{\partial{}}{\partial{b}}CE=-\frac{1}{n}\sum(y-p)

과정은 aa로 편미분하는 과정과 거의 유사하다.

로지스틱 회귀 시뮬레이션


import numpy as np
import matplotlib.pyplot as plt

# 자료입력
input = np.array([2, 4, 6, 8, 10, 12, 14])
output = np.array([0, 0, 0, 1, 1, 1, 1])
x = np.arange(0,15,0.1)

# 초기값 설정
a, b = 0, 0

# 학습률과 반복횟수
lr = 0.5
epoch = 2001

# 시그모이드함수 클래스 정의
class sigmoid :
    def __init__(self, a, b)->None:
        self.a = a 
        self.b = b
    def value(self, x)->float:
        exp = self.a*x +self.b
        return 1/(1+np.e**(-exp))

    
#학습시작
for i in range(epoch):
    result = [sigmoid(a,b).value(i) for i in input]
    error = output - result
    a_diff = (-1)*np.mean(input*error)
    b_diff = (-1)*np.mean(error)
    a = a - lr*a_diff
    b = b - lr*b_diff

plt.scatter(input, output)
plt.plot(x, sigmoid(a,b).value(x))
plt.show

감상


편미분 결과가 실제값과 예측값의 차이의 평균으로 최소제곱법에서의 그것과 같다니 매우 아름답다.아니면 원래 거기서 출발했던 것일지도 모르겠다. 끝.

profile
컴퓨터 공부하는 수학교사 입실론입니다.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 10월 15일

안녕하세요 글 잘 보고 있어요..!
제가 요즘 많이 고심하는데도 모르겠어서
여쭤보고 싶은 공업수학 문제가 있는데
혹시 답변 해주실 수 있으실까요..?
곤란 하시다면 답변 안 해주셔도 괜찮아요
문제는 이거예요…!

“분리가능 상미분 방정식은 양형태 상미분 방정식의 일부이고, 완전 상미분 방정식은 음형태 상미분 방정식 일부라고 볼 수 있다.
양형태의 상미분 방정식 중 분리가능한 상미분 방정식을 제외하고 남은 상미분 방정식들은 어떤 것들이 있는지 (즉, 분리가능하지 않은 상미분 방정식들), 음형태의 상미분 방정식 중 완전 상미분 방정식을 제외하고 남은 상미분 방정식들은 어떤 것들이 있는지 (즉, 완전하지 않은 상미분 방정식들) 쓰시오.
즉.
양형태의 상미분 방정식의 전체 집합을 W.
음형태의 상미분 방정식의 전체 집합을 U,
분리가능한 상미분 방정식의 전체 집합을 A,
완전 상미분 방정식의 전체 집합을 B
라고 할 때
집합 A^c ᑎ W 과 집합 B^c ᑎ U 에 대해 기술하는 문제이다. 그 집합에 해당하는 미분 방 정식의 예를 몇 개 구하고 그들의 공통된 특징을 기술하는 방법을 써도 좋고, 아니면 이 집 합에 속하는 방정식들의 특징을 바로 기술하여도 좋다.“

답글 달기