레이블이 딥러닝인 게시물을 표시합니다. 모든 게시물 표시
레이블이 딥러닝인 게시물을 표시합니다. 모든 게시물 표시

기초 통계 2 [ 최대 우도법, 오즈비, 로짓 함수, 로지스틱 함수, 크로스 엔트로피]

    분류에 관련된 통계를 시작한다,   항상 분류에 대한 통계를 들어 갈 때는 강좌를 하는 사람이나 받는 사람 모두  부담이 된다.    최근에 딥러닝이,  그나마 성숙하고 성장하게 된 계기는 분류에 대한 부분이 최근에 발달이 잘 되어서 이다.   조금 어렵지만,   강의 자료인 만큼 쉽게 풀어서 쓸 것이다. 


 1. 최대 우도법   

선형 회귀를 위한 뉴런

   선형회귀를 위한 뉴런은 앞서 이야기 한 부분을 클래스 만들어 정리 하는 것이다.  초기에 알고리즘을 만들고 나면 클래스 형태로 정리 해야만,  나중에 큰 프로젝트 할때 유리 하다. 

    선형 회귀는 정방향 계산에서 부터 시작 이 된다.

        $ y  = w * x +b $

   파이썬에서 함수를 사용할때 def를 써야 하는데,  def__init__(self)는 변수 초기화 할때 사용한다. 그리고 나머지는 사용자 함수로서 사용한다. 

    1) 정방향 (forpass) 계산 

     Class Neuron :

          def__init_(self) : # 초기화 변수
             self.w = 1.0
             self.b = 1.0

          def forpass(self, x):
               y_hat = x * self.w + self.b
               return y_hat


  class만들 때는 self가 반드시 들어 간다  self는 현재의 인스턴스 객체를 가르키는 기능으로 쉽게 풀어 이야기 하면  self의 사전적 의미는 그대로 자기 자신을 이야기 한다.  self라는 지시어는 이름공간(namespace)와 관련  있다.  주의점은 클래스 내에서 함수가 정의 될때, 첫번째 매개변수는 self 이어야 한다. 


    2) 역방향(backpropagation) 계산 

       선형회귀에 대한 손실함수는 앞에서 증명 하였다.  손실함수의 증명된 결과는 아래와 같다. 

     $ { \partial SL    \over  \partial  w  }  = -(y - \hat{y})x $

     $ { \partial SL    \over  \partial  b  } = -(y - \hat{y}) $

    def  backprop(self, x, err)
       w_grade = x * err
       b_grade = 1 * err

   위 그림은 가중치 및 절편에 대한 경사하강법(gradient descent) 계산 하는 것이다.    위에 있는 가중치와 절편의 손실값을 계산 하여, 새로운 가중치와 절편을 만드는 것이다.    이렇게 계속 계산 하다 보면,   손실값이 가장 적은 시점이 오게 되는데,  그때가 우리가 이야기하는 최적화 된 값이 나오게 된다. 


   3) 훈련을 위한 fit 구하기  

  def  fit(self, x, y epochs = 100):
     for i in range(epochs):
        for x_i, y_i  in zip(x, y):
    y_hat = self.forpass(x_i)
    err = -(y_i – y_hat)
    w_grad, b_grad = self.backporp(x_i, err)
      self.w -= w_grade
      self.b -=  b_grade

  fit에 대하여 구체적으로 살펴보면,  x, y이 인수와  애포크(epochs =100) 옵션값을 받아 수행 하는데,   앞서서 이야기한 가중치 학습 같이  정방향으로 계산 한 다음에 에러 값을 구하고   loss function으로 정의 된 backprop 함수에 넣어,  역방향으로 계산 후 가중치 w와 기울기 b를  업데이트 한다.  

  여기에서 옵션값 향후 파라메터 값인데,   애포크의 숫자에 따라 정확도가 좌우되고 모델이 불안 정할때,  early stop 하는 경우도 애포크를 얼마나 돌리느냐에 따라 바뀐다.  지금 일반 회귀분석이라 많은 양의 데이터를 계산 하지 않지만,  만약에 이미지 분석을 하게 되면 많은 양의 데이터가 들어가서 CPU계산으로 감당이 안되 GPU로 계산 해야 할 때가 온다. 

위의 있는 것을 하나로 묶어서 표현 해보자. 

class Neuron:

  def __init__(self):
    self.w = 1.0
    self.b = 1.0

  def forpass(self, x):
    y_hat = x * self.w + self.b
    return y_hat

  def backprop(self, x, err):
    w_grad = x * err
    b_grad = 1 * err
    return w_grad, b_grad

  def fit(self, x, y, epochs =100):
    for i in range(epochs):
      for x_i, y_i in zip(x, y):
        y_hat = self.forpass(x_i)
        err = -(y_i - y_hat) 
        w_grade, b_grade = self.backprop(x_i, err)
        self.w -= w_grade
        self.b -= b_grade
    

 Neuron 이라는 클래스에  초기화 함수 정방향 함수, 역방향 함수,  모델 fitting화  하는 함수인 fit  함수가 있다.   이를 실행 하는 방법은 아주 간단하다. 

  첫번째 클래스 객체를 활성화 시킨다. 

    neuron = Neuron()

  두번째  객체 에서 x와 y값을 넣고 활성화 한다. 

    neuron.fit(x, y)

 세번째  가중치와 절편을 본다. 

   print(neuron. w, neron.b)

  

   4) 학습 완료된 가중치와 절편 확인 하기                     

     neuron.w(가중치),  neuron.b(절편)

    plt.scatter(x, y)
    plt1 = (-0.1, -0.1 * neuron.w + neuron.b)
    plt2 = (0.15, 0.15 *  neuron.w + neuron.b
    plt.plot([pt1[0], pt2[0]], [pt1[1], pt2[1]]) 
    plt.xlabel(‘x’)
    plt.ylablel(‘y’)
    plt.show()


   경사 하강법을 적용 하여, 회귀 분석 알고리즘을 완성 하였다.   자세한 소스코드는 아래를 클릭 하면 된다. 


※ 참고서적 : 정직하게 코딩하며 배우는 딥러닝 입문 (이지스퍼블리싱)

경사 하강법(gradient descent) 으로 학습 하는 방법 야나두 딥러닝

    선형 회귀의 목표는 입력 데이터 (x)와 타깃 데이터 (y)를 통해 기울기가 절편을 찾는 것이었다.  즉 최소 제곱법에 의해 관측치와 평균치의 차이를 비교해서 기울기와 절편을 찾았다. 

경사하강법(gradient descent) 바로 그 방법 중에 하나이다.   경사 하강법은 모델이 데이터를 잘 표현 할수 있도록 기울기 (변화율)을 사용하여 조금씩 조정하는 최적화 알고리즘 이다.  경사 하강법은 모델이 데이터를 잘 표현 할 수 있도록 기울기(변화율을) 사용하여 조금씩 조정 하는 최적화 알고리즘 이다. 


1. 데이터 셋 설명       

통계 기초 1 [평균, 분산, 표준편차, 정규분포, 회귀분석]

   딥러닝에서 왜 통계를 다루는 이유는  딥러닝을 배우려면 초기 모델부터 가야 하는데,  초기 모델은 대부분 통계에서 시작 되기 때문이다.  초기의 뉴런은 회귀 방정식에서 나온 직선 가지고 검증을 하였기 때문이다.    통계 기초는 다른 깊은 부분을 이야기 하기 보다는 회귀 분석 까지 가기 까지의 과정만 이야기 할 예정 이다. 


     회귀분석까지 가려면, 아래의 그림과 같다.   그리고,  통계 기초에 대해서는 이 한 개의 포스트로  정리 한다.  





1. 평균

엔트로피 𝑒𝑛𝑡𝑟𝑜𝑝𝑦 대한 이해 딥러닝 기초

  딥러닝 손실 함수 사용할때,  약방의 감초처럼 나오는 엔트로피 함수,   이것을 모르면, 일단 딥러닝을 모른 다 할 정도로 엔트로피 함수는 중요 하다.    딥러닝에서는 손실값을 구할때 사용하는 것으로,  사실상 손실 값을 계산 하지 않으면,  실제로 모델을 실행 시키고 나서 모델의 결과 값을 알수 가 없다.    모형에 대한 평가는 엔트로피 함수 기반으로 한다. 


이것의 기원은 볼츠만의 엔트로피로 부터 나온다. 

 

공식은 S = K log W 이다. 


  불츠만이라는 분은 살아서는 인정을 받지 못하였는데,  죽어서 인정을 받으셨던 분이다.  이것이 있어서  오늘날 통계학이나 인공지능이 많이 발전 했다.  

1. 불츠만의 앤트로피

딥러닝 하면서 필요한 것 및 수학 필수 이론

   딥러닝을 그냥 시작 하면 매우 어려울 수도 있다.  왜냐 하면,  선형대수학이나,  통계학에 대한 기초 이론이 있어야 어느 정도 가능 하다.   이번에 하는 시간은 매우 적지만,  기초에 대한 부분을 우선 적으로 다룰 예정이다.    


1. 딥러닝에 필요한 것들

야나두 딥러닝 [ 많이 사용되어 지는 통계 및 인공지능]

   모형에 많이 사용 되어 지는 통계 및 인공지능은 아래와 같다.     선형 예측 보다는 Classifier 들이 더 많이 존재 한다.   실무에서는 Classifier가 거의 없다.   거의 대부분은 변화 하는 수가 아니라,   정의 되어 있는 수 (즉 Information 정보) 데이터 이다.   

  종속 변수에 영향을 주는 독립 변수가 대부분 1개 ~2개 정도 되기 때문에 Classifier를 사용하기가 어렵다.   변수들의 구성을 보았을때, 정보성 변수등 등급이 있는 경우가 있다.  회사내에서는 직급, 근속년수, 근무지역 별로 나누어 지는데,   어떤 것을 분석 하느냐에 따라서,  전부 달라 진다. 



위의  PPT 자료는 선형 회귀 빼고는 모두 Classifier를 사용한 모형이다.  하지만, Random forest 랜덤 포레스트는   Classifier 말고 회귀 분석을 하는 경우가 있다.  

 

    Linear Regression :  종속변수  y와 한 개 이상의 독립변수 X와의 선형상관관계 모델링 

    Logistic Regression  :  독립변수의 선형 결합을 이용하여 사건의 발생 가능성 예측

                                 종속변수가 범주형 데이터를 대상으로 하여 분류문제로 봄

   


    Decision Tree :  입력 변수를 바탕으로 목표변수의 값을 예측 하는 분류 모델

   K-Nearest Neighbor :  입력이 특징 공간 내 k개의 가장 가까운 훈련 데이터로 구성되어 있다. 


Support Vector Machine :  기계 학습의 분야 중 하나로 패턴 인식, 자료 분석을 위한 지도 학습 모델이며, 주로 분류와 회귀 분석을 위해 사용한다.

Random forest :  분류 , 회귀 분석 등에 사용되는 앙상블 학습 방법의 일종으로 훈련 과정에서 다수의 결정트리로 부터 분류 또는 평균 예측치를 출력 함으로 동작됨


  

  분석하는 데이터 성격에 따라 다르기는 하지만, 일반적으로 데이터를 돌리면 Random forest가 제일 잘 나온다.  하지만,  컴퓨터 연산도 많이 이루어 진다.    

 위 부분을 사용하기 위해서는 다수의 독립변수들이 존재 하여야 한다.  하지만,  실제 데이터들은 독립 변수들이 존재 하지 않는 경우가 대부분이다.   독립 변수가 존재 하는 대표적인 것은 부동산과,  사람의 신용정보 인데,  산업 현장에서 이런 데이터가 나오기는 매우 어렵다. 

하지만, 분류가 기계학습에서 머신러닝으로 발전 하게 된것은 바로,  이미지를 인식할 수 있는 딥러닝이 나오기 시작 하면서 였다.   즉 사진을 분류 할 수 있는데,  정확도가 높아 졌다는 것은 획기적인 것이다.   즉 산업 현장에서도 사용 할 수 있는 것이 많다는 것이다.   대표적인 산업군에서는 자동차 기술 등이다.    이번 강좌가 생겨난 것도 이 때문이다.    

  

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...