Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
5.model evaluation and improvement(epoch#2) 2Haesun Park
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
4.representing data and engineering features(epoch#2)Haesun Park
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
5.model evaluation and improvement(epoch#2) 2Haesun Park
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
4.representing data and engineering features(epoch#2)Haesun Park
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
5.model evaluation and improvement(epoch#2) 1Haesun Park
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
LG전자 SEED2016 발표
개미수열 문제를 풀어보면서 다양한 프로그래밍 개념들을 적용시켜봅니다. (Java/JavaScript/Go/C/Scala/Haskell 코드가 조금씩 등장)
- regex
- list processing
- iterator/generator
- coroutine/continuation
- lazy list
Coursera Machine Learning (by Andrew Ng)_강의정리SANG WON PARK
단순히 공식으로 설명하지 않고, 실제 코드 및 샘플데이터를 이용하여 수식의 결과가 어떻게 적용되는지 자세하게 설명하고 있다.
처음 week1 ~ week4 까지는 김성훈 교수님의 "모두를 위한 딥러닝"에서 한번 이해했던 내용이라 좀 쉽게 진행했고, 나머지는 기초가 부족한 상황이라 다른 자료를 꽤 많이 참고하면서 학습해야 했다.
여러 도서나 강의를 이용하여 머신러닝을 학습하려고 했었는데, 이 강의만큼 나에게 맞는것은 없었던거 같다. 특히 Octave code를 이용한 실습자료는 나중에도 언제든 활용가능할 것 같다.
Week1
Linear Regression with One Variable
Linear Algebra - review
Week2
Linear Regression with Multiple Variables
Octave[incomplete]
Week3
Logistic Regression
Regularization
Week4
Neural Networks - Representation
Week5
Neural Networks - Learning
Week6
Advice for applying machine learning techniques
Machine Learning System Design
Week7
Support Vector Machines
Week8
Unsupervised Learning(Clustering)
Dimensionality Reduction
Week9
Anomaly Detection
Recommender Systems
Week10
Large Scale Machine Learning
Week11
Application Example - Photo OCR
5.model evaluation and improvement(epoch#2) 1Haesun Park
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
Slides based on "Introduction to Machine Learning with Python" by Andreas Muller and Sarah Guido for Hongdae Machine Learning Study(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)
홍대 머신 러닝 스터디(https://www.meetup.com/Hongdae-Machine-Learning-Study/) (epoch #2)의 "파이썬 라이브러리를 활용한 머신러닝"(옮긴이 박해선) 슬라이드 자료.
LG전자 SEED2016 발표
개미수열 문제를 풀어보면서 다양한 프로그래밍 개념들을 적용시켜봅니다. (Java/JavaScript/Go/C/Scala/Haskell 코드가 조금씩 등장)
- regex
- list processing
- iterator/generator
- coroutine/continuation
- lazy list
Coursera Machine Learning (by Andrew Ng)_강의정리SANG WON PARK
단순히 공식으로 설명하지 않고, 실제 코드 및 샘플데이터를 이용하여 수식의 결과가 어떻게 적용되는지 자세하게 설명하고 있다.
처음 week1 ~ week4 까지는 김성훈 교수님의 "모두를 위한 딥러닝"에서 한번 이해했던 내용이라 좀 쉽게 진행했고, 나머지는 기초가 부족한 상황이라 다른 자료를 꽤 많이 참고하면서 학습해야 했다.
여러 도서나 강의를 이용하여 머신러닝을 학습하려고 했었는데, 이 강의만큼 나에게 맞는것은 없었던거 같다. 특히 Octave code를 이용한 실습자료는 나중에도 언제든 활용가능할 것 같다.
Week1
Linear Regression with One Variable
Linear Algebra - review
Week2
Linear Regression with Multiple Variables
Octave[incomplete]
Week3
Logistic Regression
Regularization
Week4
Neural Networks - Representation
Week5
Neural Networks - Learning
Week6
Advice for applying machine learning techniques
Machine Learning System Design
Week7
Support Vector Machines
Week8
Unsupervised Learning(Clustering)
Dimensionality Reduction
Week9
Anomaly Detection
Recommender Systems
Week10
Large Scale Machine Learning
Week11
Application Example - Photo OCR
1. MLP(Multi Layer Perceptron)의 발전과
다층 레이어를 통한 선형 분류가 불가능한 문제 해결 과정
1. 서론
1) 인공 신경망의 발견
2) 뉴런이란
3) 단층 퍼셉트론
4) 단층 퍼셉트론의 한계 및 극복방안
2. 본론
1) 다층신경망 MLP란
2) MLP 계산식
3) 역전파 다층 신경망의 학습 방법
4) 역전파 다층 신경망 구현
3. 구현 및 결과
1) Numpy 모듈을 이용해 XOR 구현
2) 상동 및 AND 구현
3) 상동 및 OR구현
4) Tensorflow를 통해 XOR MLP구현
5) 종합 결과
4. 결론
1) MLP의 특징
2) 구현 및 결과 분석
3) MLP의 한계점
4) 그 외의 신경망
5. 부록
1) numpy 모듈로 구현한 MLP
2) tensorflow로 구현한 MLP
2. 1. 서론
1) 인공 신경망의 발견
1997년 5월, IBM은 체스 게임을 할 수 있는 인공지능을 가진 딥 블루로 체스 세계 챔피언
인 개리 캐스파로브를 꺾는 기교를 선보였다. 딥 블루라는 슈퍼 컴퓨터는 초당 2억 개의 포
지션을 분석하여 체스 세계 챔피언과의 대결에서 승리를 이끌 수 있었다. 초당 엄청난 수의
앞 수를 둬봄으로써 사람보다 월등히 빠른 수 계산을 할 수 있었지만 조금 더 발전된 전략
을 세우기 위해서는 고정된 알고리즘이 아닌 경험을 통해 성능을 향상시켜야 한다는 생각을
가졌다. 먼저 기계가 학습한다는 개념을 잡기위해 사람의 두뇌를 개발 모델로 삼았는데 시
냅스는 뉴런에, 수상·축색 돌기는 링크(간선, edge)에 빗대어 인공 신경망(ANN, Artifical
Neural Network)을 개발한다.
인공신경망은 기존 인공지능과 다르게 반복된 경험을 통해 잘못된 답으로 이끄는 뉴런들 사
이의 연결은 약화시키고, 올바른 답으로 이끄는 연결은 강화한다. 그 결과로, 인공 신경망에
경험을 통한 학습 능력이 생긴다. 우리는 이를 기계가 학습하는 것으로 취급한다.
그렇다면 ANN은 어떻게 학습할 수 있을까? ANN내의 뉴런은 링크로 연결되어있고 각 링크
는 뉴런과 연관된 수치적인 가중치를 포함한다. 이 가중치는 ANN의 장기 기억을 위한 기본
적인 수단으로 바로 이 가중치를 반복적으로 조정함으로 인해 학습을 할 수 있게 된다.
2)뉴런이란
ANN을 구성하는 주요 요소인 뉴런은 입력 링크에서 여러 입력 신호를 받고 활성화 함수를
통해 새로운 활성화 수준을 계산하고 결과를 출력 링크로 내보낸다. 출력 링크로 보내지는
출력 신호는 최종적인 해(solution)이거나 다른 뉴런에 입력으로 입력될 수 있다.
위에서 언급된 활성화 함수는 다양한 종류가 존재하는데, 아래는 그 중 가장 일반적인 4개
의 활성화 함수이다.
3) 단층 퍼셉트론
퍼셉트론은 신경망의 가장 간단한 형태이다. 퍼셉트론의 주요 목적은 들어온 입력을 두 개
의 클래스로 분리하는 것이다. 따라서 기본적인 퍼셉트론의 경우, n차원의 초평면을 두 개의
결정 영역으로 나눈다. 초평면을 정답에 근사하여 분리하는 n-1차 식을 도출하기 위해 반복
적인 학습으로 가중치와 임계값을 조정한다.
단층 퍼셉트론은 두 개의 결정영역으로 분류하기 위한 가장 간단한 구조로써 조정 가능한
가중치와 활성화 함수를 포함한 단일 뉴런으로 구성된다. 아래 그림은 입력 노드가 2개인
단층 퍼셉트론을 보여준다.
3. 이 단층 퍼셉트론이 학습하는 과정으로는 다음과 같은 4개의 단계를 따른다.
- 1단계 : 초기화 – 가중치 Wi와 임계값 θ을 [-0.5, 0.5] 구간의 임의의 값으로 설정한다.
- 2단계 : 활성화 – 입력 와 목표 출력 를 적용하여
퍼셉트론을 활성화 시킨다. 여기서 n은 퍼셉트론의 입력 개수고 활성화 함수로는 step
활성 함수를 사용한다. step 활성화 함수로 나온 실제 출력 Y를 목표 출력 Yd와 차를
내어 에러(e)를 구한다.
- 3단계 : 가중치 학습 – 퍼셉트론의 가중치를 갱신한다.( wi(p+1) = wi(p) + Δwi(p),
Δwi(p) = learning rate * xi(p) * e(p) )
- 4단계 : 반복 – 반복 횟수 p값을 1 증가시키고, 2단계로 돌아가서 e가 0에 수렴할 때까지
과정을 반복한다.
4) 단층 퍼셉트론의 한계 및 극복방안
위와 같은 방법으로 AND 논리 연산자와 OR 논리 연산자의 입력 패턴을 분류하도록
훈련시킬 수 있다. 하지만, XOR 연산자는 단층 퍼셉트론으로 학습시킬 수 없다. 선형
분리가 불가능하기 때문인데
그림에서 볼 수 있듯이 AND연산자와 OR연산자는 식 1개로 입력 패턴을 분류 할 수 있다.
하지만 XOR연산자는 식 1개로 정확하게(최대한 근사하게) 입력 패턴을 분류 하는 것이
불가능하다.
이는 층이 1개인 퍼셉트론의 문제점으로 활성화 함수를 바꾼다고 근본적인 문제가 해결이
되지는 않는다.
따라서 우리는, 다층 신경망 MLP(Multi Layer Perceptron)를 통해 XOR연산자의 입력 패턴을
4. 분류하는 것을 목표로 한다.
2. 본론
1) 다층신경망 MLP란
다층 신경망은 하나 이상의 은닉층이 있는 신경망이다. 일반적으로 이 신경망은 공급
뉴런으로 이루어진 입력층 하나, 하나 이상의 은닉층, 계산 뉴런들로 이루어진 출력층
하나로 이루어져 있다. 공급 뉴런의 입력 신호는 한 층식 순방향(feedforward)으로 전파된다.
다층 신경망의 학습은 퍼셉트론과 유사하게 진행된다. feedforwarding에서는 1.3의
1~4단계로 진행하지만 출력 패턴에 대한 오차를 줄이도록 가중치를 조절하는 과정에서 역
전파(back propagation)를 하게된다.
2) 오차 역전파
100가지 이상의 서로 다른 학습 알고리즘이 존재하지만 다층 신경망을 학습하는 가장 인기
있는 방법은 역전파 방식이다. feedforwarding으로 출력층에서 출력 패턴이 생성될 떄까지
층에서 층으로 입력 패턴을 전파하다가 출력 패턴이 도출 되었을 때 목표패턴과 비교한다.
만약 목표 패턴과 다르면 그 오차를 계산한 후 출력층에서 입력층까지 신경망을 따라
거꾸로 전파(역 전파)한다. 그 오차가 전파되면서 가중치가 수정된다.
단층 퍼셉트론과 다른 점은 역 전파뿐만 아니라 활성 함수로 시그모이드 함수를 사용한다는
점이다. 이 함수의 미분은 계산하기가 쉬워 오차 기울기를 계산하기에 매우 적합하다. 즉,
순수한 역전파 알고리즘보다 학습속도가 빨라진다.
3) 역전파 다층 신경망의 학습 방법
역전파 신경망이 학습하는 과정으로는 다음과 같은 4개의 단계를 따른다.
- 1단계 : 초기화 – 가중치 Wi와 임계값 θ을 범위의 균등분포를 따라 임의의
수로 놓는다. 여기서 Fi는 신경망에 있는 각 뉴런i의 총 입력 개수다.
- 2단계 : 활성화 – 입력 와 목표 출력
를 적용하여 퍼셉트론을 활성화 시킨다. 활성화 함수로는
sigmoid 활성 함수를 사용한다.
(a) 은닉층에 있는 뉴런의 실제 출력을 계산한다. n은 은닉층에 있는 뉴런 j의 입력 개수
(b) 출력층에 있는 뉴런의 실제 출력을 계산한다. m은 출력층에 있는 뉴런 k의 입력 개수
×
- 3단계 : 가중치 학습 – 출력 뉴런과 연관된 오차를 역방향으로 전파시키면서 역전파
신경망의 가중치를 갱신해 나간다.
(a) 출력층에 있는 뉴런 먼저 오차 기울기를 계산한다. × ×
5. 여기서 에러 계산은 다음과 같다.
가중치 보정값을 계산한다. ∆ × ×
출력 뉴런에서의 가중치를 갱신한다. ∆
(b) 은닉층에 있는 뉴런의 오차 기울기를
계산한다. × ×
×
출력층과 다른점은 에러 대신 앞쪽 뉴런의 값을 사용한다.
가중치 보정값을 계산한다. ∆ × ×
은닉층에서의 가중치를 갱신한다. ∆
- 4단계 : 반복 – 반복 횟수 p값을 1 증가시키고, 2단계로 돌아가서 e가 선택한 오차
기준에 수렴할 때까지 과정을 반복한다.
4) 역전파 다층 신경망의 구현
MLP를 통해 XOR연산자의 입력 패턴을 분류하기 위한 이론 및 학습 과정을 다루었다. 이제
학습과정을 실제 프로그램 코드로 구현한다.
최종적으로 위 그림과 같은 2층(입력을 제외한) 레이어 신경망을 구현하는 것을 목표로
한다.
구현 언어 및 인터프리터로는 python 3.6, 모듈은 numpy(산술 연산)와 matplotlib(시각화)를
사용한다.
6. 3. 구현 및 결과
1) XOR 연산자 입력 패턴 분류기
2) AND 연산자 입력 패턴 분류기
3) OR 연산자 입력 패턴 분류기
4) Tensorflow 라이브러리를 활용한 MLP 구현
위 1,2,3,4는 구현한 MLP 연산자 입력 패턴 분류기를 의미하며 그 결과에 대해서는
3.5절에서 서술한다.
5) 종합 결과
총 4만회의 학습을 시킨다.
100 에폭마다 현재 학습상태의 에러를 구하여 리스트에 추가한다. 에러를 구할 때는
1에폭을 시행하여 나온 에러를 제곱하여 더한다.
최종적으로 누적된 에러 리스트값을 이용해 그래프를 그린다.
위 과정을 본문에 수식에 맞게 연산하면 [그림 1]과 같이 XOR 연산자 입력 패턴 분류기는
[0,1], [1,0] 입력에서 1에 수렴하고 그 외 패턴에서는 0으로 수렴하는 모습을 볼 수 있다.
AND와 OR 연산자 입력 패턴 분류기 역시 입력값에 알맞은 출력 값에 근접한 것을 볼 수
있다.
여러 번 돌렸을 때 각각 가중치 값과 임계값은 랜덤으로 생성 할당되므로 그에 따른
Gradient Descent 도 달라지게 된다. 따라서 오차 그래프 모양과 분류기 성능에 약간씩
차이가 있음을 확인 할 수 있었다. [그림 2,3]
그림 1
그림 2
7. 그림 2-1
[그림 2-1]은 XOR 연산자 입력 패턴에 따라 결과를 분류 할 수 있도록 4만회 학습된
분류기의 2차원 도면이다.
직선 1개로 분류가 안되던 XOR연산은 MLP를 통해 직선 2개로 분류할 수 있음을 알 수
있다.
그림 3 그림 4
[그림 4]는 2.3절의 1단계를 범위의 균등분포로 가중치와 바이어스를 초기화 한
경우이다.
그림 5
하지만 좁은 범위의 균등 분포로 가중치와 바이어스를 초기화 하더라도 [그림 5]와 같이
8. 불안정한 훈련이 진행될 수 있다.
그림 6
그림 7
그림 8
[그림 6,7,8] TensorFlow로 구현한 MLP이다. 각각 XOR, AND, OR에 대한 연산자 입력패턴
분류기의 훈련과정(오차값)을 보여준다.
TensorFlow 라이브러리에서는 신경망 훈련을 위해 다양한 오차계산방법과 오차 최적화
방법을 제공해준다. 실제로 아래 3가지 cost 연산은 전부 다른 오차 감소율을 보여준다.
35 cost = tf.reduce_mean(
36 ((y * tf.log(y_5)) + ((1 - y) * tf.log(1.0 - y_5))) * -1
37 )
40 cost = tf.reduce_mean( tf.squared_difference(y_5, y)) # 오차 제곱의 합
41 cost = tf.nn.l2_loss( y - y_5 ) # 일반적인 오차 계산
따라서 목적이 같은 신경망을 구현하더라도 구현방법과 어떤 활성함수, 어떤 최적화
알고리즘을 사용하느냐에 따라 오차 제곱의 합이 폭발적으로 감소함을 알 수 있었다.
9. 4. 결론
지금까지 다층 신경망 MLP의 구현과 결과에 대해 알아보았다.
1) MLP의 특징으로는,
a. 선형으로 분리할 수만 있던 퍼셉트론의 한계를 극복하고자 발전되었으며, 퍼셉트론과는
다르게 입력 층과, 출력 층, 그리고 1개 이상의 은닉층으로 이루어져있다.
b. Error Backpropagation방법으로 오차를 역으로 전파하는 역전파 학습을 통해 신경망의
가중치와 바이어스를 조절한다.
c. 일반적으로 순수한 역전파 알고리즘은 계산 부담이 크고 학습이 느리기 때문에
시그모이드와 같은 활성화 함수를 이용하여 학습 효율을 높힌다.
d. 역전파 알고리즘으로 훈련된 다층 신경망은 패턴 인식 문제에 주로 활용된다.
2) 구현 및 결과 분석을 통해 파악된 사실로는,
a. 훈련에 사용되는 각 뉴런사이의 가중치나 뉴런의 바이어스 초기값 설정에 따라 신경망
성능의 편차가 생기므로 초기값 설정이 매우 중요하다.
b. 같은 가중치를 갖고 학습을 시작해도 활성화 함수 및 오차계산방법, 오차최적화
알고리즘에 따라 훈련속도가 크게 달라진다.
3) MLP에도 한계점은 존재한다.
a. Supervised 학습이다. 즉, 학습데이터셋과 목표데이터셋을 주어야만이 학습할 수 있다.
b. fully connected라는 특징 때문에 입력 뉴런과 층이 많을 수록 연산속도가 매우
느려진다.
c. 무한히 레이어를 늘릴 수 없다. 레이어가 많아질수록 Error Backpropagation 과정에서
앞 쪽 레이어로 역전파 할수록 Gradient가 0으로 수렴하는 Vanishing Gradient 현상이
발생한다. 따라서 앞 쪽 레이어의 학습 속도는 매우 느려지게 된다.
d . 따라서, MLP는 출력층을 포함하여 2~5층이 적절하며 그 이상은 적재하기 힘들다.
4) 또한 MLP로 해결할 수 없는 분야의 문제도 많이 존재한다. 이러한 문제들을 해결하기
위해 목적에 따라 순환 신경망(홉필드 신경망), BAM신경망, 자기조직 신경망 등 각기 다른
신경망이 등장하고 그 이외의 신경망들도 새로이 연구되고 있다.