'머신러닝'에 해당되는 글 23건

  1. 2017.12.18 머신러닝 전조
  2. 2017.12.16 퍼셉트론
  3. 2017.11.20 [TIP] Machine Learning 학습 방법


팀에서 CCTV에서 송출하는 영상을 이미지로 변환하여 사람을 담고 있는 이미지의 좌표를 얻어내어 화면에 박스를 쳐주는

프로젝트를 부서 자체적으로 진행하고 있다.

지금은 R업체 솔루션의 프레임워크를 클라이언트/서버 형태로 분석 솔루션을 제공받아서 데모를 위한 분석서버 프로그램 개발이 완료된 상태이다.


구조는 아래와 같다.

데모의 결과를 평가하기전에 분석서버의 제원은 아래와 같다.

GPU: NVIDIA TITAN X

CPU: I7-7700(3.6~4.2Ghz) 쿼드코어

MEM: DDR4-2400MHZ (32GB)

SSD: M.2 512GB

OS: CentOs7.0


데모를 하기전에 R업체와의 몇번의 미팅에서 분석과 관련된 성능에 대해서 들은바는 아래와 같다.

- TITAN X에서 분석할 수 있는 최대 FPS는 50FPS이다.

- 다양한 오브젝트를 처리하지 않고 사람에대한 분석만 한다면 조금더 올라갈 수 있다 예상 70FPS

- 사람에 대한 정확도는 90%로 이상


사실, 여기까지만 들었을때도.. 과연 상용 제품으로서 판매 가치가 있을까라는 의문이 들었다. 그 이유는

우리팀에서 데모용도로 구매한 서버의 비용이 총 430만원이 들었다.(GPU: 175, PC:255)

위의 최대 FPS수치 대로라고 한다면 서버 한대당 GPU 한개를 장착 했을때 카메라 3대 밖에 처리 할 수 없다

보통의 카메라는(15FPS이상)이기 때문이다. 

서버 한대에 GPU를 더 장착해서 처리할 수 있는 카메라 대수를 늘린다고 하더래도 서버 한대당 10대 이상의

카메라를 분석하기는 힘들어보인다.

기존 고객사에서 사용하는 비전방식의 영상분석 수행시 서버한대당 몇 백대 이상 처리하고 있음(비전 방식은 정확도 60%이하 라고함)


여기까지만 해도.. 썩 와닿는 프로젝트가 아니지만.. 실제 데모의 결과는 더 참담하다.


R업체에서 제공해주는 로컬 분석시 15FPS 언더로 분석

R업체 솔루션에서 통신 방식으로 분석처리 할 경우 7FPS 분석

정확도: 70%이내 인듯하다.(내생각)


성능이 지나치게 안나온 이유는, 현재는 데모이기 때문에 튜닝이 많이 안되어 있는 상황이다.

사람을 분석하기 위한 학습데이터 정도에 기본 설정이 되어있는 상황이다.

모든게 정밀하게 다 갖춰졌을때 어느정도에 효과를 볼 수 있을지 큰 기대는 안되는 상황이기도 하다.


B 프로젝트를 진행하면서 짬짬히 VA서버 개발하는 것을 도와주었다.

영상과 이미지 관련하여 조금씩 스킬업이 되어가는것 같기도하다. 정리하자면,

- RTSP 프로토콜 개발(C)

- RTP프로토콜 개발(C)

- RTMP 프로토콜 개발(C)

- RTSP 스트리밍 클라이언트/서버 개발(C)

- RTMP 스트리밍 클라이언트/서버 개발(C)

- GOP 프레임 단위 파싱(I프레임, P프레임)(C)

- 프레임을 이미지로 변환(FFMPEG)

- 좌표를 이미지에 오버레이(Python-Opencv)


머신러닝을 보기전까지의 관심사는,

1. RTSP/RTP 클라이언트/서버를 네티로 개발해보자.

  - 자바 네트워크 소녀 정독

  - 자바 네트워크 소녀 개발 환경 및 테스트 환경 구축

  - 완벽하게 이해하려면 1달 정도 소요(디버깅 중)

2. FFMPEG 라이브러리에 위대함을 느끼고, FFMPEG API를 잘 활용 할 수 있도록 지금까지 만들어둔 서버들을

   FFMPEG을 이용하여 만들어보자.

  - 영상 및 음원을 로딩하여 SDP 생성

  - 영상 및 음원을 로딩하여 H264/AAC로 변환하여 전송하는 부분 소스코드 분석중

  - FFMPEG은 엄청나게 방대하여 조금씩 알아가야 할듯 함

이전까지는 이런 상황이었다.


B 프로젝트 적용이 완료된 지금 팀장님이 미션을 주심.

R업체 솔루션을 쓰지 말고 자체적으로 텐서플로우를 익혀서 자체기술로 가져보자는 것이다.

그러면서 처음 들어본 CNN이라는 개념을 이해하고 공유해달라는 것이다.


다른건 모르겠고, 스터디 기간이 2달정도 확보 되는 것과 괜찮은 스킬업이 되지 않을까? 더 나은 모습을 위함이라는 기대를 가지고,


그리하여.. 시작하게 되었다. Machine Learning, Deep Learning, TensorFlow

Posted by 이성윤

퍼셉트론은(Perceptron)은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 고안한 알고리즘이다.

이 알고리즘은 퍼셉트론이 신경망(딥러닝)의 기원이 되는 알고리즘이기 때문에 꼭 알아야 하는 개념이라고 생각한다.


1. 퍼셉트론이란?

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 여기서 말하는 신호란 전류나 강물처럼 흐름이 있다는 것을 생각하면 된다. 전류가 전선을 타고 흐르는 전자를 내보낸듯, 퍼셉트론 신호도 흐름을 만들고 정보를 앞으로 전달한다. 다만, 실제 전류와 달리 퍼셉트론 신호는 '흐른다/안 흐른다(1 or 0)'의 두 가지 값을 가질 수 있다.

 

 

입력신호: x1,x2

가중치: w1,w2

출력신호:y

원: 뉴런 또는 노드

 

입력 신호가 뉴런에 보내질때는 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 임계치를 넘어설 때만 1을 출력한다.

 

이를 수식으로 나타내면 아래와 같다.

 

세타(θ)를 -b로 치환하면 아래와 같은 식이 된다.

※ b는 편향(bias)이라 하며, w1과w2는 가중치이다. 퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 더하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다. 가중치는 각 입력신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수고, 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조정하는 매개변수이다.

 

퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다.  가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다. 가중치가 클 수록 해당 신호가 그만큼 더 중요하다는것을 뜻한다.

 

※ 가중치는 전류에서 말하는 저항에 해당한다. 저항은 전류의 흐름을 억제하는 매개변수로, 저항이 낮을수록 큰 전류가 흐른다. 한편 퍼셉트론의 가중치는 그 값이 클수록 강한 신호를 흘려보낸다. 이처럼 서로 작용하는 방향은 반대지만, 신호가 얼마나 잘(혹은 어렵게) 흐는가를 통제한다는 점에서 저항과 가중치는 같은 기능을 한다.

※ 편향이라는 용어는 "한쪽으로 치우쳐 균형을 깬다"라는 의미를 담고 있다.

 

 

1.1 AND 게이트

                                                         [AND 게이트 진리표]

 

AND 게이트를 퍼셉트론으로 표현하려면 어떻게 해야할까? W1, W2, θ 값을 정하여 조건을 충족하는 퍼셉트론을 만들어야 한다.

Ex) 0.5*x1+0.5*x2 > 0.7

       0.5*x1+0.5*x2 > 0.8

 

AND 게이트 조건을 만족하는 매개변수 조합은 무수히 많다.

 

and_gate.py

 

# coding: utf-8
import numpy as np


def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = AND(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

 

1.2 NAND 게이트

                                                         [NAND 게이트 진리표]

 

NAND게이트는 AND 게이트를 구현하는 매개변수의 부호를 반전

Ex) -0.5*x1-0.5*x2 > -0.7
       -0.5*x1-0.5*x2 > 0.8

 

NAND 게이트 조건을 만족하는 매개변수 조합은 무수히 많다.

 

nand_gate.py

# coding: utf-8
import numpy as np


def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = NAND(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

 

1.3 OR 게이트

                                                         [OR 게이트 진리표]

 

입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로

Ex) 0.5*x1+0.5*x2 > 0.3
       0.5*x1+0.5*x2 > 0.4

 

OR게이트 조건을 만족하는 매개변수 조합은 무수히 많다.

 

or_gate.py

# coding: utf-8
import numpy as np


def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = OR(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

 

※ 퍼셉트론의 매개변수 값을 정하는 것은 컴퓨터가 아니라 사람이 하는 것이다. 사람이 직접 진리표라는 '학습 데이터'를 보면서 매개변수의 값을 생각했다. 기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 한다. 학습이란 적절한 매개변수 값을 정하는 작업이며, 사람은 퍼셉트론의 구조(모델)를 고민하고 컴퓨터에 학습할 데이터를 주는 일을 한다.

 

1.4 XOR 게이트

                                                         [XOR 게이트 진리표]

 

 

                  [OR 게이트]                                             [XOR 게이트]

 

 OR게이트는 0을 원(○)으로 1을 삼각형(△)으로 나타낸 네 점을 직선으로 나누는데 문제가 없다. 하지만 XOR 게이트는 원과 삼각형을 직선으로 나누는 영역을 만드는것이 불가능하다.

 

1.5 선형과 비선형

직선하나로는 원과 삼각형을 나눌 수 없다. 하지만 '직선'이라는 제약을 없앤다면 가능하다. 퍼셉트론은 직선하나로 나눈 영역만 표시할 수 있다는 한계가 있다. 곡선을 표현 할 수 없다는 말이다. 곡선의 영역을 비선형 영역, 직선의 영역을 선형 영역이라고 한다.

 

 

1969년에 Marvin Minsky 교수가, 이 문제를 해결 하는 방법으로 Perceptron을 다중으로 겹치면 이 문제를 해결할 수 있음을 증명하였다.

 

 

2. 다층퍼셉트론

퍼셉트론으로는 XOR게이트를 표현할 수 없다. 퍼셉트론의 장점은 층을 쌓아 "다층 퍼셉트론(Multi-Layer Perceptron)"을 만들 수 있다.

 

 

2.1 기존 게이트 조합하기

XOR 게이트를 만드는 방법은 다양하며, 그중 AND, NAND, OR 게이트를 조합하는 방법이 있다.

 

 

AND, NAND, OR 게이트를 조합해 구현한 XOR 게이트

x1과 x2는  NAND와 OR 게이트의 입력이 되고, NAND와 OR의 출력이 AND 게이트의 입력으로 이어진다.

논리회로(NAND Gate)로 만든 XOR와 퍼셉트론으로 만든 XOR함수의 관계는?

- Multi-Layer (Cascaded)

 Multi-Layer Perceptron이 갖는 장점?

- 비선형성!

 

2.2 조합한 XOR 게이트

 

xor_gate.py

# coding: utf-8
from and_gate import AND
from or_gate import OR
from nand_gate import NAND


def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

if __name__ == '__main__':
    for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
        y = XOR(xs[0], xs[1])
        print(str(xs) + " -> " + str(y))

 

XOR게이트의 퍼셉트론

 

 

a. 0층의 듀 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.

b. 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 이 입력 신호를 바탕으로 y를 출력한다.

 

 

3. 정리

- 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.

- 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.

- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.

- XOR게이트는 단츤 퍼셉트론으로 표현할 수 없다.

- 2층 퍼셉트론을 이용하면 XOR게이트를 표현할 수 있다.

- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.

- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현 할 수 있다.

 

Github: https://github.com/hwauni/MachineLearning/tree/master/ML_alg/Perceptron

 

- 밑바닥부터 시작하는 딥러닝 -

 

'머신러닝&딥러닝 > 알고리즘' 카테고리의 다른 글

계단 함수(Step Function)  (0) 2017.12.18
인공 신경망  (0) 2017.12.18
Posted by 이성윤

먼저,

머신러닝을 시작하게된 계기가 부서에서 하는 프로젝트 중에 VMS 솔루션을 개발하고 있다.

VMS라는 것은 영상관리시스템(?) 정도인것 같은데, 여기에 특장점으로 영상분석이라는 기능을 추가하기

위해서 우리팀에 역할이 주어졌다.


영상분석을 하기 위해서. 기존에 고객사에서는 비전 방식(?)에서 사용하는 기술(?)로 영상분석 기능을 도입했다.

이녀석은 성능은 우월하지만 정확도가 떨어진다. 아마 분석에 대한 에러율이 30%이상일 것이다.

기존에 고객사에서 제공하는 영상분석 라이브러리를 제거하고 자체 솔루션을 도입하기 위해 머신러닝 방식에 영상분석 솔루션을 도입하게 된것 같다.


딥러닝에서 CNN이라는 기술이 화두고, 머신러닝에 기초도 없는 상태에서 CNN을 공부하는게 무리라는 생각이 들었다.


내가 공부를 진행해온 과정을 보면,


구글에서 '머신러닝 강의' 라는 키워를 가지고 3가지 정도의 강좌를 찾았다.

1. 홍콩 과기대 김성훈 교수 강의 - 모두를 위한 머신러닝/딥러닝 강의

 - http://hunkim.github.io/ml/

2. KAIST 오혜연 교수 강의 - K-MOOC(인공지능과 기계학습)

 - http://www.kmooc.kr/courses/course-v1:KAISTk+KCS470+2017_K0202/about

3. Standforad 대학의 Andrej Karpathy 강의 - CS231n: Convolutional Neural Networks for Visual Recognition

 - http://cs231n.stanford.edu/syllabus.html

4. 모두의 연구소의 Chanwoo Jacob Lee - 딥러닝 강의


이중 내가 선택한 강의는 홍콩 과기대 김성훈 교수의 강의를 선택했다.

※ 먼저 말하자면, 1번 김성훈 교수의 강의는 10번쯤 본거 같고, 4번 강의는 중간중간 참고하였으며, 3번 강의는 현재 팀에서

1강부터 세미나를 진행하고 있어서 진행중이다. 2번 강의는.. 볼 여력이 없었다. 8월초부터 시작하여 현재까지의 공부한 내용들을 기록해보겠다.


강의는 총 12강으로 구성되어 있지만, 서브 주제들이 있어서 대략 30강 정도 되는거 같다.

강의 시간은 10~20분 사이에 짧은 시간으로 되어 있으며, 교수님도 언급을 하지만, 최대한 수학과 프로그래밍을

모르는 사람을 대상으로 가르치려고 노력한것 같다.


강의를 보기로 마음 먹은날, 11강 'Convolutional Neural Networks' 강의를 아무 생각 없이 먼저 들어봤다.

CNN 강의가 총 6개로 구성되어져 있는데 다 들어봐도 무엇을 가르치려고 하는지 의도파악이 전혀되지 않았다.

그래서 처음부터 듣지 않으면 안되겠다고 생각하여 정독하게 된다.


0강 - 수업의 개요

-> 그냥 들으면 된다. 무난하다.

0강 - 김성훈교수님

- https://www.youtube.com/watch?v=BS6O0zOGX4E


1강 - 머신러닝의 개념과 용어

-> 머신러닝의 기본 개념에 대해서 간략히 설명한다.

1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=qPMeuL2LIqY


2 - Linear Regression 의 개념

이제부터 본격적이다. 내가 주로 참조한 블로거들이 있는데 초기에는 '꿈을위한단상'이라는 블로거의 글을 많이 보았으며,

중기 이후에는 '파이쿵'이라는 사람의 블로그를 많이 보았다.

'꿈을 위한 단상' 이라는 블로거의 글쓴이는 나처럼 수식에 대한 증명까지 못참고 시작하게 된거 같다.

'파이쿵' 이라는 블로거의 글쓴이는 김성훈 교수님의 강의를 듣고 그 강의를 정리한 사람이다.


키워드 :

가설 함수(Hypothesis), 회귀분석, Linear Regression, Cost


여기에서 알아야 할 점은 회귀분석이다.

내가 참고한 사이트들은 아래와 같다.

2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=Hax03rCn3UI

2강 정리

- http://pythonkim.tistory.com/7?category=573319

회귀분석정의

- http://math7.tistory.com/118

선형 회귀 분석 간단 정리

- http://mazdah.tistory.com/749?category=598657

- http://mazdah.tistory.com/756?category=598657



3강 - Linear Regression cost함수 최소화

여기서부터는.. 수학이 필요하다.

고등학교때.. 수학을 좋아했지만, 게임때문에 수학을 등한시 했던 참담함이 이제서야 들어나기 시작했다.

전직장에서, 같이 살던 동생이 내가 수학공부를 해둬야겠다고 말하자 친히 자기가 공부했던 정석 풀세트

까지 집에서 가져다 주면서 공부해보라고 했는데.. 그 기회를 놓친것이 참으로 아쉽다.

어쨋든, 난 이 고비를 넘기고 싶어서. 여기서 강의를 이어가지 않고 한달동안 중-고딩 수학 수업을 듣기 시작했다.


요즘은 너무나도 공부하기 좋은 환경이 아닌가 싶다. 지금 머신러닝을 공부하기 위해서 강의를 듣는것처럼.

수학도 여러 선생님들이 강의를 잘 올려 두었다. (아주 다행인 일)


이 강의에서 내가 수학을 공부해야겠다고 생각하게된 이유는 '미분' 때문이다.

미분을 공부하기 위해서 내가 선택한 강의는 아래와 같다.


1. 수학의 정석인강 기본정석 미적분1 김강용

- https://www.youtube.com/playlist?list=PLZ-sYD4cFpbzqR6QprwOfjd3C-ySwYGsI

여기서 내가 들은 강의는

1강 - 수열의 극한1

2강 - 수열의 극한2

5강 - 함수의 극한

6강 - 함수의 연속1

7강 - 함수의 연속2

8강 - 미분계수와 도함수1

9강 - 미분계수와 도함수2


2. 개념원리 미적분2 - 도정

https://www.youtube.com/playlist?list=PLufHu9rBg_0ijjZYlfXLAizzXWCiU9nZJ

이 사람은 원래는 유투브에 무료로 배포했지만, 변심해서 지금은 유료가 되었다.

돈 없는 학생들을 위해서 좋은 강의를 공유하고 있구나 생각했는데.. 아쉽다 ㅋ

이 강의를 듣게된 이유는 미분을 하다보니, 지수함수랑 로그함수를 알아야 하며 또한, 지수/로그 함수 그래프를

알아야 한다. 여기에서 들은 강의는

1-1강 - 지수함수(1)

1-1강 - 지수함수(2)

1-2강 - 로그함수(1)

1-2강 - 로그함수(2)

1-2강 - 로그함수(3)


3. 이외의 생각나는 강의

중학교 수학이 생각 안나서, 유리수, 지수, 로그 등도 찾아서 들었고,

자연상수, 자연로그e 뭐 이런것들도 더찾아서 들었던것 같다.


여튼 약 1달 동안 와이프랑 함께(ㅋ) 수식 풀고 증명하고 이러한 과정을 거쳐왔다.


다시 김성훈 교수님의 3강으로 돌아오면,

미분을 알아야 하는 이유는 Gradient Descent Algortithm 때문이다.


키워드 :

Hypothesis, Cost, Gradient Descent Algorithm, 미분, 편미분, 기울기, 절편


내가 참고한 사이트들은 아래와 같다.

3강 - 김성훈 교수님

- https://www.youtube.com/watch?v=TxIVr-nk1so

3강 정리

- http://pythonkim.tistory.com/10?category=573319

기울기와 절편

- http://mazdah.tistory.com/761?category=598657

시그마와 미분

- http://mazdah.tistory.com/762?category=598657

수학 - 수치 미분

- http://blog.naver.com/PostView.nhn?blogId=mykepzzang&logNo=220072089756&parentCategoryNo=16&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

수학 - 미분계수

- http://terms.naver.com/entry.nhn?docId=2073828&cid=47324&categoryId=47324

수학 - 도함수

- http://terms.naver.com/entry.nhn?docId=2073829&cid=47324&categoryId=47324&expCategoryId=47324

수학 - 미분 정리

- https://www.youtube.com/watch?v=oZyvmtqLmLo&feature=youtu.be

- https://ko.wikipedia.org/wiki/%EB%AF%B8%EB%B6%84


4강 - 여러개의 입력(feature)의 Linear Regression


이 강의에서 가장 중요한 점은 행렬이다. 또 한.. 머신러닝.. 딥러닝에서 가장 중요한 개념이 행렬이 아닌가 싶다.

또 여러 블로거들을 지나치다가 "행렬'이 머신러닝을 이해하는 가장 중요한 첫걸음이라는 글을 본것 같기도하다.

하지만, 내가 저강의를 들을때쯤에는, 아래 그림을 이해하는데 어려운게 없어서 크게 개의치 않고 넘어갔던것 같다.


중요하다고 생각되는부분이, 단순선형회귀 함수를 그래프로 그려 시각적으로 확인하는 것은 크게 어렵지 않다. 

Multi-Variable이라는 개념에서부터. 3차원 그래프까지는 예상이 되지만, 차원이 넘어갈 수록 시각적으로 그려지는

모습이 떠올려지지 않는다.


그래서 어떤이가. 행렬을 배우기에 좋은 사이트를 소개해줬다.

* 칸아카데미 선형대수 강의

- https://www.khanacademy.org/math/linear-algebra/vectors-and-spaces/vectors/v/vector-introduction-linear-algebra


아직 이강의를 듣지 못했다. 하지만 조만간에 이강의를 들을 예정이다.


키워드 :

Matrix, Transpose, 행렬, 행렬의 곱, 다중 선형 회귀


내가 참고한 사이트들은 아래와 같다.

4강 - 김성훈 교수님

- https://www.youtube.com/watch?v=kPxpJY6fRkY&feature=youtu.be

4강 정리

- http://pythonkim.tistory.com/13?category=573319

다중 선형 회귀

- http://mazdah.tistory.com/764?category=598657

- http://www.holehouse.org/mlclass/04_Linear_Regression_with_multiple_variables.html


4강까지 정리

- http://pythonkim.tistory.com/15?category=573319


5-1강 - Logistic (Regression) Classification - Hypothesis 함수 소개

로지스틱 회귀분석을 알기 위해서 상당한 시간이 필요했다.

수학적인 개념이 가장 많이 요구되는 시간이기도하다. 하지만 로지스틱회귀 분석을 넘어서면 조금 자신감도 붙고

재미가 있어지는 시기이기도 한것 같다. 참고로 딥러닝에서 유명한 알고리즘들(네트워크)은 로지스틱 회귀분석을

거쳐 로지스틱회귀가 전신인 소프트 맥스라는 함수를 사용하고 있다.


"꿈을 위한 단상" 블로거의 글이 가장 큰 도움이 되었으며, 저 사람은 문과생이라서 나와 같은 입장에서 알아가고

글을 쓴게 아닌가 싶다.

3강에서 배운 선형회귀분석은 예측을 위한 함수이다.

5강에서 가르치는 로지스틱회귀부터는 분류에 개념을 가지고 있다.

또한 이부분에서 가장 많은 블로깅과 강의를 본게 아닌가 싶다.


키워드 :

예측, 분류, 로지스틱 회귀, 자연상수 e, 자연로그, 로그, 로그함수의 그래프, 극한(무한대), 시그모이드, 오즈비, 로짓 변환


5-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=PIjno6paszY&feature=youtu.be

5강 정리

- http://pythonkim.tistory.com/16?category=573319

로지스틱 회귀 분석 이해를 위한 수학 지식

- http://mazdah.tistory.com/769?category=598657

위키 - 오즈비, 로짓 변환, 로지스틱회귀

- https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1_%ED%9A%8C%EA%B7%80

자연상수와 자연로그

- http://mazdah.tistory.com/770?category=598657

자연로그와 자연상수e 심화학습

- http://mazdah.tistory.com/773?category=598657

모두의 연구소 노트 설명- 비용함수(로지스틱 회귀)

- https://www.youtube.com/watch?v=XvB5u7YSeUk

기타 블로거들

- http://gnujoow.github.io/ml/2016/01/29/ML3-Logistic-Regression/

- http://jihoonlee.tistory.com/19

- http://gnujoow.github.io/ml/2016/01/29/ML3-Logistic-Regression/

- http://gentlej90.tistory.com/69

- https://b.luavis.kr/ml/Logistic-regression

- https://medium.com/mathpresso/mathpresso-머신-러닝-스터디-4-회귀-분석-regression-2-4f938f1f1c2d

- http://bcho.tistory.com/1142

- http://kkokkilkon.tistory.com/19

- https://ratsgo.github.io/machine%20learning/2017/04/02/logistic/


5-2강 - Logistic (Regression) Classification - Cost 함수 소개


이부분에서부터 그래프에 대해서 생각을 해보게 된것 같다. 난 기본적으로 지수함수의 그래프 로그함수의 그래프가

바로 떠올려지지 않았다. 사실 배운적도 없는것 같다. 그래서 다시 중학교 과정의 수학 지수와 로그를 공부했고

다시 고등학교 과정의 지수함수의 그래프와 로그함수의 그래프를 보게 된것 같다.



키워드 :

그래프, 지수, 로그, 지수함수의 그래프, 로그함수의 그래프, Gradient Descent, 자연상수e, Cross-Entropy


5-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=6vzchGYEJBc&feature=youtu.be

5-2강 정리

- http://pythonkim.tistory.com/22?category=573319

로지스틱회귀의 비용함수 이해

- http://mazdah.tistory.com/783?category=598657

로지스틱 회귀 비용함수로부터 Cross-entropy 도출하기

- http://mazdah.tistory.com/791?category=598657

수식을 그래프로 그려주는 사이트

- https://www.desmos.com/calculator



6-1강 - Softmax Regression (Multinomial Logistic Regression) - Multinomial 개념 소개

궁극적으로 CNN의 마지막 단계에 Softmax Regression을 사용하게 된다. 반드시 이해해야 한다.

로지스틱 회귀를 넘어섰다면, 크게 어렵지 않게 다가 올수 있다.


키워드 : 소프트맥스, Multinomial Classification, 행렬, 시그모이드, 확률, 1


6-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=MFAnsx1y9ZI&feature=youtu.be

6-1강 정리

- http://pythonkim.tistory.com/19

다항 로지스틱 회귀의 이해

- https://www.youtube.com/watch?v=MFAnsx1y9ZI&feature=youtu.be

모두의 연구소 노트 설명- 비용함수(소프트맥스)

- https://www.youtube.com/watch?v=jeOp8aIm1x8

기타 블로그

- http://copycode.tistory.com/164

- http://goodtogreate.tistory.com/entry/Softmax-Function

- http://coolingoff.tistory.com/26

- http://eehoeskrap.tistory.com/144

- http://eyeofneedle.tistory.com/3

- http://dytis.tistory.com/36


6-2강 - Softmax Regression (Multinomial Logistic Regression) - Cost 함수 소개

이번 강의에서는 Cross-Entropy 라는 개념이 나온다. 퓨쳐시스템에서 DDoS장비 펌웨어 개발업무를 할 때, 임계치 자동 설정을 위해 매일, 매주, 매달의 평균 CPS, TPS, PPS 통계를 학습하여 임계치를 자동설정해주는 기능이 있었다. 그때는.. 엔트로피가 수학적이라는 개념이라는 정도로만 알고 있었고 더 나아가서 공부해보려는 생각을 하지 못했다. 이제 이렇게 공부를 하게 되니 반갑기도하고 제대로 알아보자는 마음도 생긴다.


키워드 : Cross-Entropy, 소프트맥스, Multinomial Classification, 행렬


6-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=jMU9G5WEtBc&feature=youtu.be

6-2강 정리

- http://pythonkim.tistory.com/20?category=573319

로지스틱 회귀 비용함수로부터 Cross-entropy 도출하기

- http://mazdah.tistory.com/791?category=598657


7-1강 - ML의 실용과 몇가지 팁 - 학습 rate, Overfitting, 그리고 일반화 (Regularization)

여기 까지 왔으면 머신러닝에 이용되는 기본적인 알고리즘들을 학습했다고 볼 수 있을것 같다. 여기서 부터는 조금씩

딥러닝에 세계로 들어가는 시점인것 같다. 이번 주제에 대해서는 실질적으로 텐서플로우를 이용하여 학습하고 그 결과에

대해서 튜닝하는 과정에 이용되는 TIP 이라고 보면 될것 같다.


키워드 : 학습율, Overfitting, Regularization, L2


7-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=1jPjVoDV_uo&feature=youtu.be

7-1강 정리

- http://pythonkim.tistory.com/23?category=573319

표준화/정규화

- https://brunch.co.kr/@rapaellee/4

기타 블로그

- http://leechanho.tistory.com/24

- http://blog.naver.com/PostView.nhn?blogId=cattree_studio&logNo=220703210504

- http://studioplug.tistory.com/264


7-2강 - ML의 실용과 몇가지 팁 - Training/Testing 데이타 셋

이번 강의는 데이터를 학습시키기 위한 이론적인 방법론에 대한 설명이다.


키워드 : Training, Test, Accuracy, Performance, Evaluation


7-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=KVv1nMSlPzY&feature=youtu.be

7-2강 정리

- http://pythonkim.tistory.com/24?category=573319


8-1강 - 딥러닝의 기본 개념과, 문제, 그리고 해결 - 시작과 XOR 문제 비디오

이번 강의는 딥러닝의 역사와 거쳐온 문제와 해결 과정들을 알아갈 수 있다. 참으로 신기한게 인간의 뇌를 흉내낼 생각을 했다는 것과 그것을 컴퓨터 과학으로 옮기려 했던점. 아무튼 천재들이 많은것 같다. 나는 김성훈 교수님 강의를 다 듣고 이글을 쓰고 있다. 뭔가 부족한 점을 매우기 위해 "밑바닥부터 시작하는 딥러닝"  이라는 책을 일회독 한 상태이다. 지금은 말 할 수 있지만 AI 역사에서 겪었던 여러문제들이 생각보다 간단한 부분에서 해결을 하지 못하고 10~20년 이라는 세월이 흘러가버린거 같다.

Marvin Minsky교수님이 AI계를 열었다고 해도 무방한 분이신데 저 사람때문에 10~20년이라는 세월이 퇴보했다고 평가하고 있다. (이유는 해결하지 못한다는 논문을 너무 잘 쓰셔서 이다.)

 


키워드 : 인간의 뇌, Marvin Minsky, 퍼셉트론, XOR, Hinton, Lecun, CNN 


8-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=n7DNueHGkqE&feature=youtu.be

8-1강 정리

- http://pythonkim.tistory.com/31?category=573319

퍼셉트론

http://www.datamarket.kr/xe/index.php?mid=board_LCmL04&listStyle=gallery&document_srl=25685

신경망

http://astrod.github.io/2017/02/19/19.html

http://psiyblg.tistory.com/4


8-2강 - 딥러닝의 기본 개념과, 문제, 그리고 해결 - Back-propagation 과 2006/2007 '딥'의 출현

이번 강의 역시 딥러닝의 역사에 대한 강의이다. Back-Propagation 이라는 것은 뒤에 강의에서 나오겠지만 딥러닝의 학습에 대한 가장 쟁점이 되는 중요한 기술이다. 꼭 이해해야 한다. 그리고 이번 강의에서 왜 우리들이 딥러닝을 공부해야 하는지 그리고 아직 늦지 않았다는 것. 그리고 지금부터라도 꼭 시작해야 한다는 점을 강조하신다. 나 또한 같은 생각이다. 지금부터 시작해도 아직 늦지 않았다. 3년전에 AI를 시작한 사람과 지금의 내가 다른점이 있다면 TensorFlow, Cafe와 같은 프레임웍을 다루는 숙련도일 것이라고 보기 때문이다. 자바를 오래한 사람이, C언어를 오래한 사람이 이제 막 시작한 사람보다 더 잘할것이라는 보장은 없기 때문이다고 생각한다.


키워드 : CIFAR, Imagenet, CNN, History, Deep Learning


8-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=AByVbUX1PUI&feature=youtu.be

8-2강 정리

- http://pythonkim.tistory.com/32?category=573319



9-1강 - Neural Network 1 - XOR 문제와 학습방법

드디어 딥러닝으로 들어서는 Neural Network이다. 이번 강의에서는 Minksy 교수가 절대로 풀지못할거라며 논문을 썻던 XOR문제에 대한 설명이 나온다. Neural Network의 전신은 Percept 이론이다. 퍼셉트론은 Minksy교수님이 고안했고 AI계를 시작하는 초기 이론이된다. 나는 김성훈 교수님의 강의를 통해 전체적인 흐름을 잡았지만, "밑바닥부터시작하는 딥러닝" 이라는 책을 공부함으로써 살이 붙은것같다. 사실 "밑바닥부터시작하는 딥러닝"이라는 책이 도움이 많이 되었다.


키워드 : Neural Network, Perceptrons, XOR, Train, Minsky


9-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=GYecDQQwTdI&feature=youtu.be

9-1강 정리

- http://pythonkim.tistory.com/33?category=573319


9-x강 - Neural Network 1 - 특별편: 10분안에 미분 정리하기

이번 강의는 보너스 강의이다. 김성훈 교수님이 수포자들을 위해서 특별히 만드신것 같다. 사실... 나는 미분을 공부한적이

없기 때문에 이 강의를 소화하지 못했다.. 고딩 수학을 듣고서야 이 수업을 이해하게 되었다. 김성훈 교수님의 여러 가지 측면에서 베푸는 마음이 느껴진다.




키워드 : 미분, 편미분, 합성함수, Chain Rule


9-x강 - 김성훈 교수님

- https://www.youtube.com/watch?v=oZyvmtqLmLo&feature=youtu.be

9-x강 정리

- http://pythonkim.tistory.com/35?category=573319


9-2강 - Neural Network 1 - Backpropagation (1986 breakthrough)

이번 강의는 가장 중요한 강의이다. Minsky 교수님께서 XOR문제는 2개의 뉴럴을 NAND, OR 게이트를 통해 AND 게이트를 수행하면 문제가 해결 된다는것을 밝혔지만, 학습을 시킬 수 없다고 단언하고 논문을 냈다. 이로 인해 20년동안 이문제가 해결이 안되었다고 한다. 사실 1970년도에 어떤 대학원생이 Backpropagation을 가지고 MINKSY교수님께 문제를 해결했다고 언급했지만 Minksy교수님은 이를 묵살했다고 한다.(본인도 해결 못했는데 니가 했을리 없다(?) 마음이셨던듯) 그후로 1986년도에 Hinton 교수님께서 Backpropagation을 논문으로 발표한 후 이 문제가 해결된다.



키워드 : 순전파, 오차역전파, Backpropagation, Minsky, Hinton, 미분, Chain Rule, sigmoid


9-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=573EZkzfnZ0&feature=youtu.be

9-2강 정리

- http://pythonkim.tistory.com/36?category=573319

기타 블로그

- http://www.datamarket.kr/xe/board_LCmL04/26808

- http://blog.naver.com/cjswo9207/221060205450


10-1강 - Neural Network 2 - XSigmoid 보다 ReLU가 더 좋아

Hinton 교수님에 의해 XOR 문제로 겪는 학습에 대한 문제점을 Backpropagation 기법으로 인해 해결이 되었다. 하지만 Backpropagation에서 레이어마다 사용되는 Sigmoid 함수 때문에 레이어가(층)이 깊어질 수록 학습에 영향을 주기 위한 값들이 상쇄 되는 효과가 발생한 것이다. 이 문제를 해결하지 못해 10년이상 또 후퇴 되었다고 한다. 현재는 sigmoid를 쓰면 안된다는 것이 분석이 되었고 이를 대항하여 ReLU라는 기법을 사용한다. 또한 ReLU라는 기법으로 해결이 된다는 것을 알게된 여러 학자들이 ReLU를 개선한 여러 기법들을 연구하고 있는 중이다.

참고로 말하면.. ReLU라는 기법이 어처구니가 없다. 0보다 작은값이 들어오면 0으로 치환하고 0보다 큰값만 영향을 미칠 수 있게 값을 조정한다는 것이다. 이러한 점이 10년이라는 시간을 어둡게 만들었다는게 참으로 놀랍다.



키워드 : Sigmoid, Relu, Backpropagation, CIFAR


10-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=cKtg_fpw88c&feature=youtu.be

10-1강 정리

- http://pythonkim.tistory.com/40?category=573319

기타 블로그

- http://coolingoff.tistory.com/39

- https://m.blog.naver.com/PostView.nhn?blogId=zzing0907&logNo=220693996517&proxyReferer=http:%2F%2Fwww.google.co.kr%2Furl%3Fsa%3Dt%26rct%3Dj%26q%3D%26esrc%3Ds%26source%3Dweb%26cd%3D8%26ved%3D0ahUKEwiNuMalyrXWAhUHpZQKHc6KCnUQFgg_MAc%26url%3Dhttp%253A%252F%252

- http://mongxmongx2.tistory.com/25

- https://wooil.gitbooks.io/mlearn/content/sigmoidbcf4-b2e4-relu-ac00-b354-c88b-c544.html


10-2강 - Neural Network 2 - Weight 초기화 잘해보자

이번 강의는 학습을 시키기 위한 초기값에 대한 강의이다. 이번 강의를 설명하시면서 김성훈 교수님께서도 어처구니가 없다는식으로 피식 웃으시는데.. 정말 그렇다. 초기 값이라는게 정말 중요한데. 여러 복잡한 알고리즘 RBM 등등이 있지만, Xavier/He라는 학자들이 어처구니 없는 결과를 보여준 것이다. 현재 HE의 초기 값으로 이미지넷 대회에서 Error 율이 3%로 밖에 되지 않는다고 한다. 참고로 인간은 5%이다. 하지만 이 분야는 아직도 많은 연구중에 있다고 한다.


xavier - 입력값과 출력값 사이의 난수를 선택해서 입력값의 제곱근으로 나눈다.
he - 입력값을 반으로 나눈 제곱근 사용. 분모가 작아지기 때문에 xavier보다 넓은 범위의 난수 생성.


키워드 : Xavier, He, Weight, 초기값 


10-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=4rC0sWrp3Uw&feature=youtu.be

10-2강 정리

- http://pythonkim.tistory.com/41?category=573319

기타블로그

- http://sanghyukchun.github.io/75/

- http://coolingoff.tistory.com/40


10-3강 - Neural Network 2 - Dropout 과 앙상블

이번 강의도 역시 Weight 초기값을 잘줘야 하는 것처럼 학습을 잘 할 수 있는 방법에 대한 설명이다. 하지만 이번 강의에서도 교수님께서 어처구니가 없어서 피식 웃으신다. 그러한 이유는 일반적으로 생각했을때 잘 안될것 같은데 결과가 좋게 나오기 때문이다.  대표적인게 아래의 그림이다. 여러개의 복잡한 네트워크 구조에서 일부의 노드들을 제거하여 특정 노드로만 학습을 시킨다는 것인데, 예를들어 설명한게 전문가가 너무 여러명이면 배가 산으로가니 특정 전문가들로만 학습을 하겠다는 것이다. 그냥 사람들의 일반적인 이론을 접목한것인데 잘 되는것이다.(아직 왜 잘 되는지 증명이 안된것으로 보인다)



키워드 : Dropout, Ensemble, 전문가, Train


10-3강 - 김성훈 교수님

- https://www.youtube.com/watch?v=wTxMsp22llc&feature=youtu.be

10-3강 정리

- http://pythonkim.tistory.com/42?category=573319

기타 블로그

- http://firmcode.tistory.com/13

- http://hexists.tistory.com/m/204

- http://bhappy0906.tistory.com/19

- http://newsight.tistory.com/106

- http://coolingoff.tistory.com/41


10-4강 - Neural Network 2 - 서브 주제

이번 강의는 Deep Learning의 기초를 마무리하는 시간이다. 교수님께서는 누구나 레고 블록처럼 모델을 만들 수 있다고 말씀하신다. 그러한 이유는 이미 우리는 Tensorflow와 같은 좋은 도구를 제공 받을 수 있음이지 싶다. 알파고는 CNN이라는 모델을 적용 했다고 한다. 그 밖에 RNN 등 다양한 모델들이 있는데 이것들이 결국 레고 블록처럼 자기 취향대로 조합을 했다는 것이다. 그러므로 우리도 우리의 모델을 자유롭게 만들 수 있다는 것이다. 





키워드 : CNN, RNN, 레고 블록


10-4강 - 김성훈 교수님

- https://www.youtube.com/watch?v=YHsbHjTBx9Q&feature=youtu.be

10-4강 정리

- http://pythonkim.tistory.com/43?category=573319

기타 블로그

- http://coolingoff.tistory.com/42

- https://wooil.gitbooks.io/mlearn/content/lec10/10-4-b808-ace0-cc98-b7fc-b137-d2b8-c6cd-baa8-b4c8-c744-b9c8-c74c-aecf-c313-c544-bcf4-c790.html



11-1강 - Convolutional Neural Networks - ConvNet의 Conv 레이어 만들기

처음 시작이 CNN 강의 부터 들었었다. 정말 그때는 무슨 소리인지 하나도 못알아 들었었는데. 지금은 전반적인 내용은 다 이해되고 있다. 하지만 아직까지도 그려지지 않은 부분이 있지만, 이제 공부의 시작이니 앞으로 나아가다 보면 자연스레 채워질 거라고 보고 있다. CNN은 고양이의 시신경을 연구하여 그 특징을 컴퓨터 과학에 접목 시켰다는 것이  참으로 놀랍다. 초기에 친구에게 CNN을 언급했더니 이상한 논문을 하나 던져줬었다. 쉽다며.. 이제 읽어볼 수있을것 같기도하다.


논문: Long-term Recurrent Convolutional Networks for Visual Recognition and Description

       https://arxiv.org/pdf/1411.4389.pdf





키워드 : 고양이, CNN, Convolutional, RELU, POOL, FC, Softmax, Layer


11-1강 - 김성훈 교수님

- https://www.youtube.com/watch?v=Em63mknbtWo&feature=youtu.be

11-1강 정리

- http://pythonkim.tistory.com/52?category=573319

Stanford

- http://aikorea.org/cs231n/convolutional-networks/

- http://cs231n.stanford.edu/index.html

CNN

- http://deeplearning.net/tutorial/lenet.html

- http://www.robots.ox.ac.uk/~vgg/practicals/cnn/

- https://www.slipp.net/wiki/pages/viewpage.action?pageId=26641520



11-2강 - Convolutional Neural Networks ConvNet Max pooling 과 Full Network

이번 강의는 듣는데 그렇게 어려움이 없다. 수학적인 부분도 산술연산정도 밖에 들어가지 않는다. 다만.. 왜 이렇게 하면 학습이 잘 되는지 그 원리가 아직 감이 안온다. 앞으로도 계속 공부를 이어가기 때문에 항상 염두해두면서 공부를 진행해야겠다.




키워드 : pooling, Layer, Fully Connected, Softmax


11-2강 - 김성훈 교수님

- https://www.youtube.com/watch?v=2-75C-yZaoA&feature=youtu.be

11-2강 정리

- http://pythonkim.tistory.com/53?category=573319


11-3강 - Convolutional Neural Networks - ConvNet의 활용예

이번 강의는 여러 논문들을 소개한다. 이제 드디어 저러한 논문들을 읽을 준비가 된것 같다. 여러 용어들 그 용어들이 어떠한 역할을 하는지를 알고 있기 때문이다. 다음 강의는 Neural Network의 꽃이라는 RNN이다.  하지만 나는 강의 듣는것을 이번 강의로 멈추었다. 언젠가 공부할 기회가 오겠지만 지금 필요한것은 이미지 학습에 관한 것이기 때문에 CNN까지만 공부를 하면 된다.



키워드 : CNN, LeNet, ResNet, AlexNet, GoogleNet, layer, filter, stride, padding


11-3강 - 김성훈 교수님

- https://www.youtube.com/watch?v=KbNbWTnlYXs&feature=youtu.be

11-3강 정리

- http://pythonkim.tistory.com/54?category=573319


마치며,

맨땅에 해딩하는 마음으로 시작하게 되었지만, 이제 제법 용어 정리도 되고 기초 지식 정도는 학습한것 같다. 8월 부터 11월 까지 공부한 내용을 대충 정리하자면

1. 김성훈 교수님 강의: 약 10회독

2. 모두의 연구소의 Chanwoo Jacob Lee 강의:  약 3~4회독

3. 밑바닥부터 시작하는 딥러닝: 약 1.5 회독

4. Standforad 대학의 Andrej Karpathy 강의: 은지 세미나로 1회독 중

 

다행히 팀 업무가 스터디라서 업무중에도 공부할 시간이 주어졌다. 업무 시간 이외에도 대략 새벽 1시까지는 공부했으니 하루 공부량은 꽤 되는거 같다.


이제부터는 공부한 내용을 그때그때 기록하는 습관이 갖추어 지길 바란다..

Posted by 이성윤