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

신경망 알고리즘을 벡터화 한번에 전체 샘플 업데이트 야나두 딥러닝

확률적 경사하강법은 가중치 1번 업데이트 할때 1개의 샘플을 사용하므로, 손실 함수의 전역 최소값을 불안 정하게 찾았다.   

하지만,  배치 하강법은 가중치를 1번 업데이트 할때  전체 샘플을 사용하므로, 손실 함수의 전역 최소값을 안정적으로 찾는다.   

여기에서 가장 핵심적으로 이야기 할 수 있는 그림은 아래와 같다. 

점곱과 행렬곱의 차이



로지스틱 손실함수 L과 a미분하기 야나두 딥러닝 강의 후기

   야나두 딥러닝 강의 할때  순간 당황해서 실수한 것이다.  로지스틱 손실 함수 L과 a 미분하기 공식은 수학 적으로는 꽤 복잡해 보인다.   한번 당황하다 보니,  계속 당황 해서 점심시간 까지 당항 스러움이 있었다.  지금은 어느 정도 정리되었다.  


그럼  당황했던 내용으로 들어가 보자.

 

로지스틱 손실 함수 미분하기

CNN 이미지 데이터 전처리 및 변환 기초 지식 [메모리와 하드 용량이 큰 경우 빠른 연산], Cat and dog dataset

    CNN 하면서 이미지 데이터 전처리는 아주 중요한 것이다.  본인이 수집하거나 관찰 한 사진이 많고,  데이터  라벨 작업을 하였다면,  아래와 같은  딥러닝 할 수 있는 데이터 셋을 만들어야 한다. 

즉 feature (image) 값과  label값(cat & dog)을   numpy array값을 변환 하여야 한다.  데이터 전처리 하는데,  아래의 2가지 방법이 있다.  이번 설명은 첫번째 설명 방법이다.   이런 방법으로 하려면,  RAM 메모리와 HDD 용량이 커야 한다.   

  • 이미지 데이터 원본 그대로 학습
  • Data generator 로 학습
  즉,  개별 설비를 AI로  자동 제어 하고자 하는 시스템을 구현하는 경우 첫번째 방법으로 한다. 

Image processing

참고로 훈련할 파일은 아래에 있다. 

야나두 딥러닝 교육 후기 정리

   사내 자율 교육에서 야나두 딥러닝을 진행 하였다.   중공업 계열인 우리 회사 특성 상 남자들만 있었고,   코로나 바이러스의 영향으로 방역 수칙을 준수 하면서 강의를 해야 했기 때문에,  아주 큰 강의장에  작은 인원을 두고 강의 하였다.  




  즉 사회적 거리두기를 하고 하였다.   역시 딥러닝 강의인 만큼  목차는 아래와 같았다. 

그래프 그리기 2편 막대그래프 (bar graph), 원 그래프(pie chart) , 버블 차트(bubble chart) 야나두 딥러닝

    강의 시간 질문이 광범위 해서,  2번째 주제를 접하는데,   2번째 주제는  사실상  모델링 하기전에 미리 데이터 탐색용도로는 쓰이지 않고 사람이 보고 직관적으로 분석 하는 그래프이다.  실제로는 2번째 주제의 그래프가 많이 쓰이는데,   2번째 주제에 대한 그래프는 R이나 파이썬 같은 것보다는 파워포인트나 엑셀에서 작성 하는 것이 훨씬 좋다.   

엑셀이나 파워포인트에 이러한 기능 들이 잘 들어가 있다. 


파이썬 그래프 툴


그래도 대량의 데이터는 엑셀이나 파워포인트에서는 할수 없으니,  여기에서 다루어 보겠다. 


회귀 분석 최소제곱법 (선형 VS 경사하강법) 야나두 딥러닝

  야나두 딥러닝  강의를 하는 데,  질문이 나왔다.   linear regression(회귀 분석)을 할 때, 경사 하강 법에 의해 계산 된 것이 좋은지 ,  아니면, 통계학은 계산 된 최소 제곱법을 간단 하게 정리 하여 계산 한것이 좋은지 확인 해 보라는 것이였다.    


선형 VS  경사하강

  그런데,  야나두 딥러닝에서 경사 하강법을 가지고 회귀 분석하는 것은  교육용으로 쓰이는 것이다.   실무 용으로 쓰이는 것이 아니다.   

파이썬 기초 [리스트, if, for, 함수, 클래스] 야나두 딥러닝

   야나두 딥러닝에서 딥러닝 원리에 필요한 알고리즘만 모아 놓았다.  리스트, if, for 함수, 클래스가 많이 쓰인다.   다른 것도 있지만,  이번에 교육 할 때는 필요한 원리만 이야기 하는 것이 좋을 것 같다.   왜냐하면,  기초적인 개념을 많이 아는 것도 좋지만,  정보가 너무 많으면 수강생들이 많이 헤깔리기 때문이다. 

 보다 기초적인 개념을 알려며,  백문이 불여일견 인 것 처럼  백문이 불여일타 가 되어야 한다. 즉 기초적인 코딩도  훈련의 일종이다.    하긴  훈련을 아무리 많이 하여도 실전을 하지 않으면, 나중에 잊어 버린다.   이번에는 누가 봐도 잘 알 수 있게 끔 가능 한한 쉽게 하려고 노력 하였다. 


파이썬 기초


Linear algebra 선형대수 야나두 딥러닝

어느 딥러닝 책에서 이런 카피가 나왔다. 
 딥러닝과 수학엔 어떤관계가 있을까? 

 딥러닝은 미분적분학, 선형대수학, 통계학과 관련 있고 이중에서 선형대수학이 단연 으뜸이라 한다. 그런데 도대체 어떤 관계가 있다는 걸까?

  선형대수는 관련 성이 아주 깊다.  딥러닝 모델을 만들때, Single Layer를 만들어서 하는 경우는 거의 없기 때문이다.   Single Layer는  만드는 경우는  교육 받을 때 이외에는 거의 쓰지 않는다.   실제로 모델을 만들때는 Multi Layer를 사용한다.   Multi Layer의 기본적인 공식이 행렬로 이루어 졌으니,  반드시 알고 넘어가야 한다. 


  
선형대수  Linear algebra




numpy 기초 브로드캐스팅, array, arange, indexing, slicing 야나두 딥러닝

  딥러닝 초반에 공부 할 때,  사람들이 굉장히 많이 헤깔려 하는 분야가 있다.  바로 numpy이다.  기본적으로 Python을 할때,  리스트 및 배열을 표현한다.  numpy.에서   주로 하는 것은 배열을 차원으로 표현하는 것이다.   Image연산은 3차원 배열이 되고,   일반적인 머신러닝은 2차원 배열로 한다.  주로 사용하는 명령어는  array, arange, 이다.  

기본적으로 알고리즘을 표현 하려면, 일반적인 Python 과  numpy로 표현 해야 하는데,  이것을 모르는 상태에서  그냥 데이터 셋만 불러와서 모델을 돌리는 것은 의미가 없다.     딥러닝의 CNN의 모델이 있다고 가정 하면,   그 모델에 대하여,  파라메터 튜닝에 의해 모델의 성능이 달라지는데,   파라메터 튜닝을 알려면 기본적인 알고리즘은 이다.  
 




numpy의 국내 서적이 거의 없다. 있긴 한데,  굉장히 헤깔리게 많이 늘려 놓았다.  차라리 아래의 사이트에서 참조해서 코드를 익히는 것이 좋아서 아래의 사이트를 참고 하였다. 

넘파이 기초



가중치 규제 (regularization) L1, L2 란 야나두 딥러닝

      과대적합을 해결 하는 대표적인 방법 중 하나인 가중치 규제(regularization) 이다.  가중치 규제란 말 그대로 가중치의 값이 커지지 않도록 제한 하는 기법이다.  가중치를 규제하면 모델의 일반화 성능이 올라간다. 


아래 경사가 급한 것과 낮은 그래프 특정 샘플에만 적용 하는 사례를 보여 준다.   즉 가중치를 제한 하면,  모델 몇 개의 데이터에 집착하지 않는다. 

노름(norm) 의 이란 야나두 딥러닝

 Norm, 노름 

과대적합(overfitting), 과소적합(underfitting) 야나두 딥러닝

  모델 돌린 이후에 분석하는 overfitting, underfitting

검증세트 분할, 데이터 스케일 과적합 및 모델 튜닝

과적합 및 모델 튜닝에 대하여..



    요새 Tensorflow나 Keras에 들어가면,  우리가 필요한 소스코드가 API 형태로 되어 있다.  따라서 데이터 전처리가  수행 되고 나면,    CNN인 경우  필터의 크기  및   dens의 크기 epochs 배치 사이즈, 데이터 분할 등  같은 파라메터 만 조정 하게 된다.    사실상 프로젝트에 들어가면,  모델 돌리는 것 보다  더욱 중요 한 것이,  데이터 셋 준비하는 것이다.  

특히 CNN 같은 경우에는 사람 눈으로 식별 할 수 있을 정도로 데이터 셋이 준비가 되어야 하는 것은 필수 적이다. 


검증 세트 분할 

로지스틱 회귀 뉴런으로 단일층 신경망

 신경망 이야기 하게 되면,  제프리 힌튼 교수 처음 강의에 뉴런에 대해서 나온다.  한국어로 번역이 가능 한데,   음성을 영어로 인식 한 다음에  번역한 다음에 한국어로 나오게 할 수 있다.  

즉 사람의 뇌의 구조는 복잡하게 되어 있다는 데  뉴런이 10^10개  100억개가 있다고 한다.  생물학적인 성격의 설명이 있는데,  직접 동영상을 보는 것이 좋을 것 같아서 링크하였다.

    

1. 일반적인 신경망  

유방암 데이터 세트 (Wisconsin breast cancer dataset)

     제조업에는   금융하고, 의학 분야와 같이 분류 할 수 있는 데이터들이 많이 있다.  이번에 소개할 데이터 셋은 사이킷런에 있는 위스콘신 유방암 데이터 셋이다.  유방암 데이터 셋은 유방암 세포 특징 10개에 대하여 평균, 표준오차, 최대 이상치가 기록되어 있다. 


유방암 데이터 세트의 분석 목표는 유방암 데이터 샘플이 악성 종양인기 정상 종양인지 분류하는 문제 이다.  

 1. 유방암 데이터 세트 

분류 하는 뉴런 part 1

  분류하는 뉴런은  딥러닝에서 가장 많이 사용하는 것이다.   일반 데이터를 분류하고자 할때는 데이터가 없어서, 분류를 하지 못하였다면,  사진이나  글 같은 비정형 데이터는 상당히 많다.  하지만,  그것을 하는데도  사전에 전처리 기술이 필요하지만,  딥러닝은 퍼셉트론을 기반으로 지속적으로 발전 해 온 것도 사실이다.       


1. Perceptron(퍼셉트론)

기초 통계 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. 평균

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

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