발표자: 이활석(NAVER)
발표일: 2017.11.
최근 딥러닝 연구는 지도학습에서 비지도학습으로 급격히 무게 중심이 옮겨 지고 있습니다. 본 과정에서는 비지도학습의 가장 대표적인 방법인 오토인코더의 모든 것에 대해서 살펴보고자 합니다. 차원 축소관점에서 가장 많이 사용되는Autoencoder와 (AE) 그 변형 들인 Denoising AE, Contractive AE에 대해서 공부할 것이며, 데이터 생성 관점에서 최근 각광 받는 Variational AE와 (VAE) 그 변형 들인 Conditional VAE, Adversarial AE에 대해서 공부할 것입니다. 또한, 오토인코더의 다양한 활용 예시를 살펴봄으로써 현업과의 접점을 찾아보도록 노력할 것입니다.
1. Revisit Deep Neural Networks
2. Manifold Learning
3. Autoencoders
4. Variational Autoencoders
5. Applications
발표자: 이활석(NAVER)
발표일: 2017.11.
최근 딥러닝 연구는 지도학습에서 비지도학습으로 급격히 무게 중심이 옮겨 지고 있습니다. 본 과정에서는 비지도학습의 가장 대표적인 방법인 오토인코더의 모든 것에 대해서 살펴보고자 합니다. 차원 축소관점에서 가장 많이 사용되는Autoencoder와 (AE) 그 변형 들인 Denoising AE, Contractive AE에 대해서 공부할 것이며, 데이터 생성 관점에서 최근 각광 받는 Variational AE와 (VAE) 그 변형 들인 Conditional VAE, Adversarial AE에 대해서 공부할 것입니다. 또한, 오토인코더의 다양한 활용 예시를 살펴봄으로써 현업과의 접점을 찾아보도록 노력할 것입니다.
1. Revisit Deep Neural Networks
2. Manifold Learning
3. Autoencoders
4. Variational Autoencoders
5. Applications
The word ‘stochastic‘ means a system or process linked with a random probability. Hence, in Stochastic Gradient Descent, a few samples are selected randomly instead of the whole data set for each iteration. In Gradient Descent, there is a term called “batch” which denotes the total number of samples from a dataset that is used for calculating the gradient for each iteration. In typical Gradient Descent optimization, like Batch Gradient Descent, the batch is taken to be the whole dataset. Although using the whole dataset is really useful for getting to the minima in a less noisy and less random manner, the problem arises when our dataset gets big.
Suppose, you have a million samples in your dataset, so if you use a typical Gradient Descent optimization technique, you will have to use all of the one million samples for completing one iteration while performing the Gradient Descent, and it has to be done for every iteration until the minima are reached. Hence, it becomes computationally very expensive to perform.
This problem is solved by Stochastic Gradient Descent. In SGD, it uses only a single sample, i.e., a batch size of one, to perform each iteration. The sample is randomly shuffled and selected for performing the iteration.
발표자: 최윤제(고려대 석사과정)
최윤제 (Yunjey Choi)는 고려대학교에서 컴퓨터공학을 전공하였으며, 현재는 석사과정으로 Machine Learning을 공부하고 있는 학생이다. 코딩을 좋아하며 이해한 것을 다른 사람들에게 공유하는 것을 좋아한다. 1년 간 TensorFlow를 사용하여 Deep Learning을 공부하였고 현재는 PyTorch를 사용하여 Generative Adversarial Network를 공부하고 있다. TensorFlow로 여러 논문들을 구현, PyTorch Tutorial을 만들어 Github에 공개한 이력을 갖고 있다.
개요:
Generative Adversarial Network(GAN)은 2014년 Ian Goodfellow에 의해 처음으로 제안되었으며, 적대적 학습을 통해 실제 데이터의 분포를 추정하는 생성 모델입니다. 최근 들어 GAN은 가장 인기있는 연구 분야로 떠오르고 있고 하루에도 수 많은 관련 논문들이 쏟아져 나오고 있습니다.
수 없이 쏟아져 나오고 있는 GAN 논문들을 다 읽기가 힘드신가요? 괜찮습니다. 기본적인 GAN만 완벽하게 이해한다면 새로 나오는 논문들도 쉽게 이해할 수 있습니다.
이번 발표를 통해 제가 GAN에 대해 알고 있는 모든 것들을 전달해드리고자 합니다. GAN을 아예 모르시는 분들, GAN에 대한 이론적인 내용이 궁금하셨던 분들, GAN을 어떻게 활용할 수 있을지 궁금하셨던 분들이 발표를 들으면 좋을 것 같습니다.
발표영상: https://youtu.be/odpjk7_tGY0
Accelerating Dynamic Time Warping Subsequence Search with GPUDavide Nardone
Many time series data mining problems require
subsequence similarity search as a subroutine. While this can
be performed with any distance measure, and dozens of
distance measures have been proposed in the last decade, there
is increasing evidence that Dynamic Time Warping (DTW) is
the best measure across a wide range of domains. Given
DTW’s usefulness and ubiquity, there has been a large
community-wide effort to mitigate its relative lethargy.
Proposed speedup techniques include early abandoning
strategies, lower-bound based pruning, indexing and
embedding. In this work we argue that we are now close to
exhausting all possible speedup from software, and that we
must turn to hardware-based solutions if we are to tackle the
many problems that are currently untenable even with stateof-
the-art algorithms running on high-end desktops. With this
motivation, we investigate both GPU (Graphics Processing
Unit) and FPGA (Field Programmable Gate Array) based
acceleration of subsequence similarity search under the DTW
measure. As we shall show, our novel algorithms allow GPUs,
which are typically bundled with standard desktops, to achieve
two orders of magnitude speedup. For problem domains which
require even greater scale up, we show that FPGAs costing just
a few thousand dollars can be used to produce four orders of
magnitude speedup. We conduct detailed case studies on the
classification of astronomical observations and similarity
search in commercial agriculture, and demonstrate that our
ideas allow us to tackle problems that would be simply
untenable otherwise.
발표자: 곽동현(서울대 박사과정, 현 NAVER Clova)
강화학습(Reinforcement learning)의 개요 및 최근 Deep learning 기반의 RL 트렌드를 소개합니다.
발표영상:
http://tv.naver.com/v/2024376
https://youtu.be/dw0sHzE1oAc
코드로 이해하는 Back_propagation(cs231n)SANG WON PARK
여러 샘플들을 참고하다 보니, tensorflow를 사용하지 않는 경우에는 직접 gradient를 계산하여 back propagation을 하도록 구현한 코드가 많다. 내가 직접 구현할 필요는 없더라도, 좀 더 명확하게 이해할 필요는 있을 것 같아서 cn231n note에서 제공하는 코드와 설명을 정리.
http://blog.naver.com/freepsw/220928184473
http://cs231n.github.io/neural-networks-case-study/ 참고
데이터를 작게 생성하여, 직접 코드와 생성된 데이터를 확인하면서 좀 더 직관적으로 이해하는 과정으로 정리하다보니, 코드보다 설명이 더 많다... 아직도 명확하지는 않지만 나름대로 정리는 되었다.
Sequence labeling problem을 해결하는 모델 중 초기 모델인 Hidden markov model에 대해 정리한다. HMM을 설명하기 위한 기본 개념에서 벗어나지 않도록 작성한 자료이다.
- Markov chain
- Markov assumption
- Hidden markov model
- HMM training: forward-backward algorithm
- HMM likelihood computation
- HMM decoding: viterbi algorithm
The word ‘stochastic‘ means a system or process linked with a random probability. Hence, in Stochastic Gradient Descent, a few samples are selected randomly instead of the whole data set for each iteration. In Gradient Descent, there is a term called “batch” which denotes the total number of samples from a dataset that is used for calculating the gradient for each iteration. In typical Gradient Descent optimization, like Batch Gradient Descent, the batch is taken to be the whole dataset. Although using the whole dataset is really useful for getting to the minima in a less noisy and less random manner, the problem arises when our dataset gets big.
Suppose, you have a million samples in your dataset, so if you use a typical Gradient Descent optimization technique, you will have to use all of the one million samples for completing one iteration while performing the Gradient Descent, and it has to be done for every iteration until the minima are reached. Hence, it becomes computationally very expensive to perform.
This problem is solved by Stochastic Gradient Descent. In SGD, it uses only a single sample, i.e., a batch size of one, to perform each iteration. The sample is randomly shuffled and selected for performing the iteration.
발표자: 최윤제(고려대 석사과정)
최윤제 (Yunjey Choi)는 고려대학교에서 컴퓨터공학을 전공하였으며, 현재는 석사과정으로 Machine Learning을 공부하고 있는 학생이다. 코딩을 좋아하며 이해한 것을 다른 사람들에게 공유하는 것을 좋아한다. 1년 간 TensorFlow를 사용하여 Deep Learning을 공부하였고 현재는 PyTorch를 사용하여 Generative Adversarial Network를 공부하고 있다. TensorFlow로 여러 논문들을 구현, PyTorch Tutorial을 만들어 Github에 공개한 이력을 갖고 있다.
개요:
Generative Adversarial Network(GAN)은 2014년 Ian Goodfellow에 의해 처음으로 제안되었으며, 적대적 학습을 통해 실제 데이터의 분포를 추정하는 생성 모델입니다. 최근 들어 GAN은 가장 인기있는 연구 분야로 떠오르고 있고 하루에도 수 많은 관련 논문들이 쏟아져 나오고 있습니다.
수 없이 쏟아져 나오고 있는 GAN 논문들을 다 읽기가 힘드신가요? 괜찮습니다. 기본적인 GAN만 완벽하게 이해한다면 새로 나오는 논문들도 쉽게 이해할 수 있습니다.
이번 발표를 통해 제가 GAN에 대해 알고 있는 모든 것들을 전달해드리고자 합니다. GAN을 아예 모르시는 분들, GAN에 대한 이론적인 내용이 궁금하셨던 분들, GAN을 어떻게 활용할 수 있을지 궁금하셨던 분들이 발표를 들으면 좋을 것 같습니다.
발표영상: https://youtu.be/odpjk7_tGY0
Accelerating Dynamic Time Warping Subsequence Search with GPUDavide Nardone
Many time series data mining problems require
subsequence similarity search as a subroutine. While this can
be performed with any distance measure, and dozens of
distance measures have been proposed in the last decade, there
is increasing evidence that Dynamic Time Warping (DTW) is
the best measure across a wide range of domains. Given
DTW’s usefulness and ubiquity, there has been a large
community-wide effort to mitigate its relative lethargy.
Proposed speedup techniques include early abandoning
strategies, lower-bound based pruning, indexing and
embedding. In this work we argue that we are now close to
exhausting all possible speedup from software, and that we
must turn to hardware-based solutions if we are to tackle the
many problems that are currently untenable even with stateof-
the-art algorithms running on high-end desktops. With this
motivation, we investigate both GPU (Graphics Processing
Unit) and FPGA (Field Programmable Gate Array) based
acceleration of subsequence similarity search under the DTW
measure. As we shall show, our novel algorithms allow GPUs,
which are typically bundled with standard desktops, to achieve
two orders of magnitude speedup. For problem domains which
require even greater scale up, we show that FPGAs costing just
a few thousand dollars can be used to produce four orders of
magnitude speedup. We conduct detailed case studies on the
classification of astronomical observations and similarity
search in commercial agriculture, and demonstrate that our
ideas allow us to tackle problems that would be simply
untenable otherwise.
발표자: 곽동현(서울대 박사과정, 현 NAVER Clova)
강화학습(Reinforcement learning)의 개요 및 최근 Deep learning 기반의 RL 트렌드를 소개합니다.
발표영상:
http://tv.naver.com/v/2024376
https://youtu.be/dw0sHzE1oAc
코드로 이해하는 Back_propagation(cs231n)SANG WON PARK
여러 샘플들을 참고하다 보니, tensorflow를 사용하지 않는 경우에는 직접 gradient를 계산하여 back propagation을 하도록 구현한 코드가 많다. 내가 직접 구현할 필요는 없더라도, 좀 더 명확하게 이해할 필요는 있을 것 같아서 cn231n note에서 제공하는 코드와 설명을 정리.
http://blog.naver.com/freepsw/220928184473
http://cs231n.github.io/neural-networks-case-study/ 참고
데이터를 작게 생성하여, 직접 코드와 생성된 데이터를 확인하면서 좀 더 직관적으로 이해하는 과정으로 정리하다보니, 코드보다 설명이 더 많다... 아직도 명확하지는 않지만 나름대로 정리는 되었다.
Sequence labeling problem을 해결하는 모델 중 초기 모델인 Hidden markov model에 대해 정리한다. HMM을 설명하기 위한 기본 개념에서 벗어나지 않도록 작성한 자료이다.
- Markov chain
- Markov assumption
- Hidden markov model
- HMM training: forward-backward algorithm
- HMM likelihood computation
- HMM decoding: viterbi algorithm
데이터를 둘러싼 정책과, 기업과 기술의 진화는 빠르게 변화하고 있으며, 모든 지향점은 기업들이 다양한 데이터를 활용하여 경쟁력을 확보하고 이를 통해 AI기반의 혁신을 하고자 하는데 있다.
이 과정에서 수 많은 기업의 업무 전무가, 데이터 사이언티스트 등이 다양한 기업의 혁신을 지원할 수 있는 AI 모델을 검증하는 과정을 거치게 됩니다.
하지만, 이렇게 수 많은 AI 모델이 실제 비즈니스에 적용되기 위해서는 인프라, 및 서비스 관점의 기술이 반드시 필요하게 됩니다.
MLOps는 기업에 필요한 혁신적인 아이디어(AI Model)을 적시에 비즈니스 환경에 적용할 수 있도록 지원하는 기술 및 트렌드 입니다.
주요 내용은
- 데이터를 둘러싼 환경의 변화
- 기업의 AI Model 적용시 마주하는 현실
- MLOps가 해결 가능한 문제들
- MLOps의 영역별 주요 기술들
- MLOps 도입 시 기업의 AI 환경은 어떻게 변할까?
- AI 모델을 비즈니스 환경에 적용(배포)한다는 것은?
2021년 12월 코리아 데이터 비즈니스 트렌드(데이터산업진흥원 주최)에서 발표한 내용을 공유 가능한 부분만 정리함.
발표 영상 참고 : https://www.youtube.com/watch?v=lL-QtEzJ3WY
Cloud DW technology trends and considerations for enterprises to apply snowflakeSANG WON PARK
올해 처음 오프라인으로 진행된 "한국 데이터 엔니지어 모임"에서 발표한 cloud dw와 snowflake라는 주제로 발표한 내용을 정리하여 공유함. (2022.07)
[ 발표 주제 ]
Cloud DW 기술 트렌드와 Snowflake 적용
- Modern Data Stack에서 Cloud DW의 역할
- 기존 Data Lake + DW와 무엇이 다른가?
- Data Engineer 관점에서 어떻게 사용하면 좋을까? (기능/성능/비용 측면의 장점/단점)
[ 주요 내용 ]
- 최근 많은 Data Engineer가 기존 기술 스택(Hadoop, Spark, DW 등)의 기술적/운영적 한계를 극복하기 위한 고민중.
- 특히 Cloud의 장점과 운영 및 성능을 고려한 Cloud DW(AWS Redshift, GCP BigQuery, DataBricks, Snowflake)를 고려
- 이 중 Snowflake를 실제 프로젝트에 적용한 경험과 기술적인 특징/장점/단점을 공유하고자 함.
작년부터 정부의 데이터 정책 변화와 Cloud 기반의 기술 변화 가속화로 기업의 데이터 환경에도 많은 변화가 발생하고 있고, 기업들은 이에 적응하기 위한 다양한 시도를 하고 있다.
그 중심에 cloud dw (또는 Lake house)가 위치하고 있으며, 이를 기반으로 통합 데이터 플랫폼으로의 아키텍처로 변화하고 있다. 하지만, 아직까지 기존 DW 제품과 주요 CSP(AWS, GCP, Azure)의 제품군을 다양하게 시도하고 있으나, 기대와 다르게 생각보나 낮은 성능 또는 비싼 사용료, 운영의 복잡성으로 인한 많은 시행착오를 거치고 있다.
이 상황에서 작년에 처음 검토한 snowflake의 다양한 기능들이 기업들의 고민과 문제를 상당부분 손쉽게 해결할 수 있다는 것을 확인할 수 있었고, 이를 이용하여 실제 많은 기업들에게 적용하기 위한 POC를 수행하거나, 실제 적용하는 프로젝트를 수행하게 되었다.
본 발표 내용은 이러한 경험을 기반으로 기업(그리고 실제 업무를 수행할 Data Engineer) 관점에서 snowflake가 어떻게 문제를 해결할 수 있는지 cloud dw를 도입/활용/확장 하는 단계별로 문제와 해결 방안을 중심으로 설명하였다.
https://blog.naver.com/freepsw?Redirect=Update&logNo=222815591918
The Data tech for AI based innovation(기업의 AI기반 혁신을 지원하는 데이터 기술)SANG WON PARK
2020년 데이터산업진흥원에서 발표한 자료를 일부 편집하여 공유함.
2020년 당시에 Data Platform에서 AI lifecycle를 효율적으로 지원하는 platform을 적극적으로 검토 및 설계하는 작업을 진행하였고, 이 때 검토 및 활용했던 기술들을 기업 관점에서 필요한 내용을 기준으로 정리하였다.
기업들은 전통적인 방식으로의 혁신에 한계를 체감하고 있으며, 최근 AI기반으로 성공적인 혁신(비즈니스 강화, 새로운 비즈니스로 전환 등)에 성공한 기업들을 빠르게 벤치마크 하고 있다.
이렇게 AI 기반으로 기업을 혁신하는 것은 고도화된 AI 모델의 도입으로 해결되지 않으며, 수많은 기술들의 최적화된 조합 및 활용이 필요하다.
이 자료에서는 그 중 AI모델에 핵심적인 데이터를 적시에, 고품질의 형태로, 빠르고 안정적으로 제공할 수 기술 트렌드를 소개한다.
전체 내용은
- AI기반 혁신이란?
- 혁신을 위해서는 어떤 점이 어려운가?
- 고품질 데이터 확보 기술
- 빠르게 AI 모델을 학습하는 기술
- 적시에 다양한 AI 모델을 비즈니스에 적용하는 기술
2020년 기준으로 작성된 자료라, 일부 기술 트렌드가 반영되지 않을 수 있으나 아직까지 많은 기업들이 고민하고 해결하고자 하는 영역이라 참고할 수 있을 것 같다.
이 내용을 기준으로 발표한 영상 링크 : https://www.youtube.com/watch?v=OVm4-uk59ZA
Cloud dw benchmark using tpd-ds( Snowflake vs Redshift vs EMR Hive )SANG WON PARK
몇년 전부터 Data Architecture의 변화가 빠르게 진행되고 있고,
그 중 Cloud DW는 기존 Data Lake(Hadoop 기반)의 한계(성능, 비용, 운영 등)에 대한 대안으로 주목받으며,
많은 기업들이 이미 도입했거나, 도입을 검토하고 있다.
본 자료는 이러한 Cloud DW에 대해서 개념적으로 이해하고,
시장에 존재하는 다양한 Cloud DW 중에서 기업의 환경에 맞는 제품이 어떤 것인지 성능/비용 관점으로 비교했다.
- 왜기업들은 CloudDW에주목하는가?
- 시장에는어떤 제품들이 있는가?
- 우리Biz환경에서는 어떤 제품을 도입해야 하는가?
- CloudDW솔루션의 성능은?
- 기존DataLake(EMR)대비 성능은?
- 유사CloudDW(snowflake vs redshift) 대비성능은?
앞으로도 Data를 둘러싼 시장은 Cloud DW를 기반으로 ELT, Mata Mesh, Reverse ETL등 새로운 생테계가 급속하게 발전할 것이고,
이를 위한 데이터 엔지니어/데이터 아키텍트 관점의 기술적 검토와 고민이 필요할 것 같다.
https://blog.naver.com/freepsw/222654809552
AWS EMR을 사용하면서 비용을 최적화하기 위해 필요한 다양한 관점의 방안을 검토하여 정리한 자료.
비용 최적화 대상은 zeppelin/jupyter notebook과 apache spark를 활용하는 서비스를 대상으로 하였으며, 해당 작업이 aws emr에서 어떻게 동작하는지 내부 구조을 파악하여 확인함.
- AWS EMR이란?
- AWS EMR의 과금 방식은?
- 어떻게 비용을 최적화 할 것인가?
- 최적의 EMR 클러스터 구성 방안
- 가성비 높은 Instance 선정 방안
- Apache Spark 성능 개선 방안
가장 중요한 것은 실행할 job의 자원사용량/성능을 모니터링하고, 이에 맞게 자원을 최적화하는 것이 필요함.
Understanding of Apache kafka metrics for monitoring SANG WON PARK
2019 kafka conference seould에서 발표한 "Apache Kafka 모니터링을 위한 Metrics 이해" 슬라이드 자료
기존 2018년 자료에서 모니터링 관점에서 중요한 metrcis를 중심으로 정리하였고, 2019년 기준으로 추가/변경된 metrics를 반영하였다.
주용 내용은
- 업무에 최적화된 apache kafka 모니터링을 하려면?
- 어떤 정보를 모니터링 해야 할까?
- 적시성 관점의 모니터링 지표 (TotalTimeMs에 대한 세부 구조 이해)
- 안정성 관점의 모니터링 지표 (데이터 유실이 없이 중단없는 서비스)
- 언제 apache kafka 클러스터를 확장해야 할까? (어떤 지표를 봐야 할까?)
위 모든 지표는 producer/broker/consumer 3가지 측면에서 검토하였다.
컨퍼런스 영상 링크 : https://www.youtube.com/watch?v=p2RGsTOCHAg
Apache kafka performance(latency)_benchmark_v0.3SANG WON PARK
Apache Kafka를 이용하여 이미지 데이터를 얼마나 빠르게(with low latency) 전달 가능한지 성능 테스트.
최종 목적은 AI(ML/DL) 모델의 입력으로 대량의 실시간 영상/이미지 데이터를 전달하는 메세지 큐로 사용하기 위하여, Drone/제조공정 등의 장비에서 전송된 이미지를 얼마나 빨리 AI Model로 전달 할 수 있는지 확인하기 위함.
그래서 Kafka에서 이미지를 전송하는 간단한 테스트를 진행하였고,
이 과정에서 latency를 얼마나 줄여주는지를 확인해 보았다.(HTTP 프로토콜/Socket과 비교하여)
[현재 까지 결론]
- Apache Kafka는 대량의 요청 처리를 위한 throughtput에 최적화 된 솔루션임.
- 현재는 producer의 몇가지 옵션만 조정하여 테스트한 결과이므로,
- 잠정적인 결과이지만, kafka의 latency를 향상을 위해서는 많은 시도가 필요할 것 같음.
- 즉, 단일 요청의 latency는 확실히 느리지만,
- 대량의 처리를 기준으로 평균 latency를 비교하면 평균적인 latency는 많이 낮아짐.
Test Code : https://github.com/freepsw/kafka-latency-test
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
Apache Kafak의 빅데이터 아키텍처에서 역할이 점차 커지고, 중요한 비중을 차지하게 되면서, 성능에 대한 고민도 늘어나고 있다.
다양한 프로젝트를 진행하면서 Apache Kafka를 모니터링 하기 위해 필요한 Metrics들을 이해하고, 이를 최적화 하기 위한 Configruation 설정을 정리해 보았다.
[Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안]
Apache Kafka 성능 모니터링에 필요한 metrics에 대해 이해하고, 4가지 관점(처리량, 지연, Durability, 가용성)에서 성능을 최적화 하는 방안을 정리함. Kafka를 구성하는 3개 모듈(Producer, Broker, Consumer)별로 성능 최적화를 위한 …
[Apache Kafka 모니터링을 위한 Metrics 이해]
Apache Kafka의 상태를 모니터링 하기 위해서는 4개(System(OS), Producer, Broker, Consumer)에서 발생하는 metrics들을 살펴봐야 한다.
이번 글에서는 JVM에서 제공하는 JMX metrics를 중심으로 producer/broker/consumer의 지표를 정리하였다.
모든 지표를 정리하진 않았고, 내 관점에서 유의미한 지표들을 중심으로 이해한 내용임
[Apache Kafka 성능 Configuration 최적화]
성능목표를 4개로 구분(Throughtput, Latency, Durability, Avalibility)하고, 각 목표에 따라 어떤 Kafka configuration의 조정을 어떻게 해야하는지 정리하였다.
튜닝한 파라미터를 적용한 후, 성능테스트를 수행하면서 추출된 Metrics를 모니터링하여 현재 업무에 최적화 되도록 최적화를 수행하는 것이 필요하다.
xgboost를 이해하기 위해서 찾아보다가 내가 궁금한 내용을 따로 정리하였으나, 역시 구체적인 수식은 아직 모르겠다.
요즘 Kaggle에서 유명한 Xgboost가 뭘까?
Ensemble중 하나인 Boosting기법?
Ensemble 유형인 Bagging과 Boosting 차이는?
왜 Ensemble이 low bias, high variance 모델인가?
Bias 와 Variance 관계는?
Boosting 기법은 어떤게 있나?
Xgboost에서 사용하는 CART 알고리즘은?
Machine Learning Foundations (a case study approach) 강의 정리SANG WON PARK
실제 비즈니스에서 많이 활용되는 사례를 중심으로 어떻게 기존 데이터를 이용하여 알고리즘을 선택하고, 학습하여, 예측모델을 구축 하는지 jupyter notebook을 이용하여 실제 코드를 이용하여 실습할 수 있다.
강의 초반에 강조하는 것 처럼, 머신러닝 알고리즘은 나중에 자세히 설명하는 과정이 따로 있고, 이번 강의는 실제 어떻게 활용하는지에 완전히 초점이 맞추어져 있어서, 알고리즘은 아주 간략한 수준으로 설명해 준다. (좀 더 구체적인 내용은 심화과정이 따로 있음)
http://blog.naver.com/freepsw/221113685916 참고
https://github.com/freepsw/coursera/tree/master/ML_Foundations/A_Case_Study 코드 샘플
Apache kafka performance(throughput) - without data loss and guaranteeing dat...SANG WON PARK
Apache Kafak의 성능이 특정환경(데이터 유실일 발생하지 않고, 데이터 전송순서를 반드시 보장)에서 어느정도 제공하는지 확인하기 위한 테스트 결과 공유
데이터 전송순서를 보장하기 위해서는 Apache Kafka cluster로 partition을 분산할 수 없게되므로, 성능향상을 위한 장점을 사용하지 못하게 된다.
이번 테스트에서는 Apache Kafka의 단위 성능, 즉 partition 1개에 대한 성능만을 측정하게 된다.
향후, partition을 증가할 경우 본 테스트의 1개 partition 단위 성능을 기준으로 예측이 가능할 것 같다.
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
Coursera Machine Learning by Andrew NG 강의를 들으면서, 궁금했던 내용을 중심으로 정리.
내가 궁금했던건, 데이터를 분류하는 Decision boundary를 만들때...
- 왜 가중치(W)와 decision boundary가 직교해야 하는지?
- margin은 어떻게 계산하는지?
- margin은 어떻게 최대화 할 수 있는지?
- 실제로 margin을 최대화 하는 과정의 수식은 어떤지?
- 비선형 decision boundary를 찾기 위해서 어떻게 kernel을 이용하는지?...
http://blog.naver.com/freepsw/221032379891
모두를 위한 Deep Reinforcement Learning 강의를 요약정리
http://hunkim.github.io/ml/
실습에 사용된 코드
https://github.com/freepsw/tensorflow_examples/tree/master/20.RL_by_SungKim
1. Code로 이해하는 RNN
The Unreasonable Effectiveness of Recurrent Neural Networks
에서 학습용으로 제공하는
“minimal character-level RNN language mode” 의 코드 이해
- 약 100 line 정도의 코드를 통해 BPTT의 개념을 확인
- 상태가 어떻게 BPTT를 통해서 역전파 되고,
- Vanishing gradient 문제를 유발하늦지 이해
freepsw
2. 1) Character RNN 흐름
1). 파일(Input.txt )에서 아래의 문장을 읽어온다.
à Hello World. Best Wishes. (25자)
2). 5문장씩 학습을 진행한다.
à seq_length = 5
3). 각 단계(n)의 마지막 상태값은 다음단계의 input으로 사용된다.
à 가장 처음 문자는 이전 상태가 없으므로,
0으로 초기화한다.
4). 100회 (n % 100 == 0)마다 학습된 파라미터를 이용하여
모델을 테스트한다. (sample함수 호출)
à input값에 대한 예측을 잘 하는지 출력함.
변수 표현 (아래 변수는 서로 동일하다.)
V = Why
W = Whh
U = Wxh
S = hs
S0 S1 S2 S3 S4
Y0 Y1 Y2 Y3 Y4
X0 X1 X2 X3 X4
s t ‘ ‘ W i
t ‘ ‘ W i s
Loss, dV, dU, dW,
dS4
U
W
V
P = 15
N = 3
S0 S1 S2 S3 S4
Y0 Y1 Y2 Y3 Y4
X0 X1 X2 X3 X4
H e l l o
e l l o ‘ ‘
Loss, dV, dU, dW,
dS4
U
W
V
P = 0
N = 0
S0 S1 S2 S3 S4
Y0 Y1 Y2 Y3 Y4
X0 X1 X2 X3 X4
‘ ‘ W o r l
W o r l d
Loss, dV, dU, dW,
dS4
U
W
V
P = 5
N = 1
S0 S1 S2 S3 S4
Y0 Y1 Y2 Y3 Y4
X0 X1 X2 X3 X4
d . ‘ ‘ B e
, ‘ ‘ B e s
Loss, dV, dU, dW,
dS4
U
W
V
P = 10
N = 2
P = 0
N = 4 S0
hprev hprev
Sample()P = 0
N = 100
3. 2) Code 구조
RNN실행에 필요한 input, output, hidden layer 관련 변수 설정
정해진 단어 갯수(seq_length=5) 별로 학습을 진행 (무한 loop)
- 학습할 전체 문자가 25개
- 5개씩 학습하게 되는데,
- 이때 마지막 5개 input 문자 “shes.” 가 예측할 target문자인
- 26번째 문자가 존재하지 않아서 “shes.”에 대한 학습은 하지 않는다.
모든 단계에서 Loss를 통해서 파라미터를 최적화 하고, à lossFun(…)
매 100번 째에 학습된 모델을 테스트해 본다. à sample(…)
5. 2) Training 데이터 준비
학습할 input data와 정답(output) data 준비
• 한번에 seq_length(5) 만큼 읽고,
• Target 문자를 예측하도록 학습한다.
p : 0 input : [5, 2, 6, 6, 7]
p + seq_length + 1 = 6
input(ch) : Hello
target(ch) : ello
p : 5
p + seq_length + 1 = 11
input(ch) : Worl
target(ch) : World
p : 10
p + seq_length + 1 = 16
input(ch) : d. Be
target(ch) : . Bes
p : 15
p + seq_length + 1 = 21
input(ch) : st Wi
target(ch) : t Wis
p : 20
p + seq_length + 1 = 26
5글자씩만 읽으니까,
마지막 “shes.” 까지 학습하지 못하는 문제가 있다.
이 부붐은 무시할 것인지, 마지막 까지 학습할 수 있
도록 할지는 적용영역별로 결정하여 로직을 추가해야
한다
또는 word-rnn으로 해결이 가능할것 같기도..
아래 규칙에 따라 처음 loop( n == 0) 이거나,
읽을 () 사이즈가 전체보다 클 경우 상태값을 초기화 하고,
문장의 처음부터 읽도록 한다 (p=0)
if p + seq_length + 1 >= len(data) or n == 0:
hprev = np.zeros((hidden_size, 1)) # reset RNN memory
p = 0 # go from start of data
p += seq_length # p : 다음에 읽어올 input 문자의 시작 index
6. S0 S1 S2 S3 S4
YS0 YS1 YS2 YS3 YS4
X0 X1 X2 X3 X4
H e l l o
U
W
Vhprev
inputs
targets
0 1 2 3 4t
e l l o ‘ ‘
PS0 PS1 PS2 PS3 PS4
E0 E1 E2 E3 E4
Inputs 문자열을 기준으로 tagets 문자열을 예측하고, loss(E)를 계산
• Input : ‘Hello’ (입력된 Hello에서 H를 제외한 나머지 5개 단어 학습)
• Target : ‘ello ‘ (H à e, He à l, Hel à l, Hell à o, Hello à ‘ ‘
• hprev : 상태값 (첫문자에서는 0로 초기화됨)
단계별 변수 설명
• YS = V * S + bh
• 상태값(S)와 파라미터 V, bh를 이용한 선형함수 계산 값
• PS = softmax(YS)
• YS 값을 0~1 사이의 확률값으로 변환
• E = -log(PS)
• 자연로그 함수를 이용하여 정답과의 거리를 계산 (loss를 계산)
• 예를 들어 PS의 값이 1(정답)이라면 E는 0으로 loss가 없다.
• PS가 0(오답)이라면 자연상수 e로 무한대의 값을 가진다
3) lossFun 함수 – Forward : Loss(Error) 계산
Loss(E)의 총합
V = Why
W = Whh
U = Wxh
S = hs
7. 3) lossFun 함수 – Forward : Loss(Error) 계산 – 1
xs : [input_length][vocab_size] 배열
• xs[t][inputs[t]] = 1
hs[t] = np.tanh(np.dot(Wxh, xs[t]) + np.dot(Whh, hs[t - 1]) + bh)
(100, 14) * (14, 1) + (100, 100) * (100, 1) + (100, 1)
(100, 1) + (100, 1) + (100, 1)
Input 값과 파라미터(U, W), 이전상태값을 이용하여 현재 상태값을 계산한다.
• X (xs) : inputs[t]에 해당하는 문자(one hot encoding되어 숫자로 표현)
• 예를 들어 H의 경우 5로 표현
• U (Whx) : xs에 대한 파라미터
• 𝑺 𝒕 (hs) = U * X + W * 𝑺 𝒕#𝟏 + bh
• 현재의 상태(𝑺 𝒕 )는 이전 상태(𝑺 𝒕#𝟏)에 영향을 받도록 구성되어 있다.
S0 S1 S2 S3 S4
YS0 YS1 YS2 YS3 YS4
X0 X1 X2 X3 X4
H e l l o
U
W
Vhprev
inputs
targets
0 1 2 3 4t
e l l o ‘ ‘
PS0 PS1 PS2 PS3 PS4
E0 E1 E2 E3 E4
{0: array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 1.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])} to char : H
{0: array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 1.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]]),
1: array([[ 0.],
[ 0.],
[ 1.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])} to char : e
t = 0 t = 1
(14, 1)
(14, 1)
{0: array([[ -8.13582810e-03],
[ -1.57227229e-03],
[ -2.00276238e-02],
[ -4.71613068e-04],
[ -1.08314518e-02],
[ 1.17515240e-02],
[ 8.16061705e-03]]),
-1: array([[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.],
[ 0.]])}
xs hs
t = 0
8. 3) lossFun 함수 – Forward : Loss(Error) 계산 – 2
xs : [input_length][vocab_size] 배열
• xs[t][inputs[t]] = 1
hs[t] = np.tanh(np.dot(Wxh, xs[t]) + np.dot(Whh, hs[t - 1]) + bh)
ys[t] = np.dot(Why, hs[t]) + by
(14, 100) * (100, 1) + (14, 1)
(14, 1) + (14, 1)
ps[t] = np.exp(ys[t]) / np.sum(np.exp(ys[t]))
loss += -np.log(ps[t][targets[t], 0])
S0 S1 S2 S3 S4
YS0 YS1 YS2 YS3 YS4
X0 X1 X2 X3 X4
H e l l o
U
W
Vhprev
inputs
targets
0 1 2 3 4t
e l l o ‘ ‘
PS0 PS1 PS2 PS3 PS4
E0 E1 E2 E3 E4
현재 상태와 V 파라미터를 이용하여 계산한 결과를 이용하여 정답의 확률 및 Loss(Error)를 계산
• YS = V * S + bh
• 상태값(S)와 파라미터 V, bh를 이용한 선형함수 계산 값
• PS = softmax(YS)
• YS 값을 0~1 사이의 확률값으로 변환
• E = -log(PS)
• 자연로그 함수를 이용하여 정답과의 거리를 계산 (loss를 계산)
• 예를 들어 PS의 값이 1(정답)이라면 E는 0으로 loss가 없다.
• PS가 0(오답)이라면 자연상수 e로 무한대의 값을 가진다
ps[0][targets[0], 0] = 0.0714479
np.log(0.0714479) = -2.63878676622
loss += -(-2.63878676622)
- ps에는 모든 문자별로 예측한 확률이 저장되어 있음. (100%기준)
- 이 중 정답(여기서는 index 2번)의 값이 높은지 비교함.
- 값이 1과 가깝다면 잘 예측한것으로 판단할 수 있음.
- 여기서는 0.07로 예측률이 너무 낮음. 전체적으로 예측률의 차이가 없다고 보
여짐.(학습이 안되어 있음)
Log(1) = 0이므로, 이 말은 해당 값이 1에 가까우면 loss도 작아진다는 뜻.
학습을 통해 계산된 확률(ps)이 정답의 index에서 1에 가깝도록 weight를
조정해야 한다
참고로 Log(x) = a : 자연상수 e를 a승 하면, x가 된다는 의미.
모든 입력문자 (여기서는 5자)별로 loss를 계산하여 합산한다.
마이너스(-)를 곱한 이유는 log의 결과가 음수로 나오므로, 이를 양수로 변환하기 위함 (loss
를 양수로 계산하기 편함)
loss를 계산하는 부분 à
cross_entropy
http://cs231n.github.io/neural-
networks-case-study/
9. 4) lossFun 함수 – Back Propagation – 1단계
가장 마지막 결과인 Loss(E)를 기준으로 모든 파라미터를 back propagation을 통해서 계산한다.
1). 먼저 정답의 score(ys)가 Loss(E)에 미치는 영향 (gradient)를 계산
• 이 부분은 정답 y가 1인 경우에 대한 간단한 공식이 있다.
• http://cs231n.github.io/neural-networks-case-study
•
&'(
&)*(
= 𝑝𝑠. − 1 = 𝑑𝑦
2). V가 E에 미치는 gradient를 계산
• V(Why)와 연관된 변수는 상태(S), Loss에 대한 score의 기울기가 있다.
• Chain rule을 적용하여 V에 대한 gradient를 계산하면
• 아래와 같은 결과가 도출된다.Wxh
xs
Whh
hs(t-1)
bh
x
x +
dWxh
xs
Whh
hs(t-1)
𝒅𝒉𝒏𝒆𝒙𝒕
dbh
x
x +
6
7
8
9
BPTT (Back Propagation Through Time)
Why
hs
by
+ tanh
dWhy
dh
dby
+ tanhg
g
dhraw
2
3
4
5
ysx
dyx
1
ps
softmax
ps -1
Loss(E)
cross entropy
+
+
𝜕𝐸.
𝜕𝑦𝑠.
= 𝑝𝑠. − 11
2
𝜕𝐸.
𝜕𝑉
=
𝜕𝐸.
𝜕𝑦𝑠.
∗
𝜕𝑦𝑠.
𝜕𝑉
= 𝑑𝑦 ∗ 𝑠.
𝒚𝒔𝒕 = 𝑽 ∗ 𝒔𝒕 + 𝒃𝒚
𝜕𝑦𝑠.
𝜕𝑉
= 𝑠.
𝜕𝑦𝑠.
𝜕𝑠.
= 𝑉
𝜕𝑦𝑠.
𝜕𝑏𝑦
= 1
𝑬 𝒕 = −log(𝑦.)
𝒑𝒔𝒕 = softmax(𝒚𝒔𝒕)
=
OPQR
∑ O
PQT
T
dy
dWhy
Chain rule 적용
V = Why
W = Whh
U = Wxh
S = hs
10. 4) lossFun 함수 – Back Propagation – 2단계
dWxh
xs
Whh
hs(t-1)
𝒅𝒉𝒏𝒆𝒙𝒕
dbh
x
x +
6
7
8
9
BPTT (Back Propagation Through Time)
dWhy
dh
dby
+ tanhg
dhraw
2
3
4
5
dyx
1
ps -1
Loss(E)
+
현재 상태(S)가 현재 loss(E)에 미치는 영향을 계산해 보자. è 여기서 S는 tanh를 적용한 상태(S)
그런데 RNN 구조상 현재 상태(𝑺𝒕) 는 이전 상태(𝑺𝒕#𝟏)에 영향을 받는 구조이다.
à 𝒈 𝒕 = 𝑼 ∗ 𝒙𝒕 + 𝑾 ∗ 𝒔𝒕#𝟏 + 𝒃𝒉
à 𝒔𝒕 = tanh 𝑔.
따라서 𝑺𝒕 는 이전의 상태를 back propagation 시에 반영해야 한다.
• 여기서 이전상태는 backward 방향에서의 이전상태이다.
• 예를 들어, backward에서는 Time step의 마지막에서 거꾸로 계산하게 되므로,
• 현재 t=4라면 그 이전(t=5)인 상태는 없으므로 𝑺 𝟓는 0이 된다.
1) 먼저 단순하게 이전 상태가 없다고 생각하고 gradient를 계산해 보자.
•
&'(
&*(
=
&'(
&)*(
∗
&)*(
&*(
= 𝑝𝑠. − 1 ∗ 𝑉 = 𝑑𝑦 ∗ 𝑉
2) 그럼 이전 상태가 있는 경우, 이전 상태는 어떻게 반영할까?
• Backward 방향으로 현재 시점의 상태가 영향을 미치는 모든 Loss(E)를 계산하여 더해주어야
한다.
• 예를들어 (t=4)라면 backward 방향으로 영향을 주는 상태가 없고,
• (t=2) 이라면 𝑺 𝟐가 𝐸n, 𝐸o , 𝐸p에 영향을 주게 된다. 따라서 아래와 같이 2개의 값을 더해준다.
•
&'q
&*q
=
&'q
&*q
+
&'r
&*q
+
&'s
&*q
• 이렇게 이전의 상태가 Loss에 미치는 영향을 다 합해줘야 하는데, 이를 계산해 놓은 것이
“ 𝒅𝒉𝒏𝒆𝒙𝒕” 이다.
𝜕𝐸.
𝜕𝑠.
3dh
S0 S1 S2 S3 S4
Tanh(U*X + W*𝑺#𝟏 + bh)
Tanh(U*X + W*𝑺 𝟎 + bh)
Tanh(U*X + W*𝑺 𝟏 + bh)
S0 = 5
로 가정
Tanh(5) =
0.9
Tanh(0.9)
= 0.74
Tanh(0.74)
= 0.62
S0가 미치는 영향도가 점점
작아짐.
Vanishing gradient 문제
12. 4) lossFun 함수 – Back Propagation – 3단계
3단계에서 계산된 dhraw를 기준으로 나머지 파라미터에 대한 gradient를 계산해 보자.
1) Bias bh가 loss(E)에 미치는 영향 계산
2) 가중치 U가 loss(E)에 미치는 영향 계산
𝒈 𝒕 = 𝑼 ∗ 𝒙𝒔 𝒕 + 𝑾 ∗ 𝒔 𝒕#𝟏 + 𝒃𝒉
𝒔 𝒕 = tanh 𝑔.
𝜕𝑠.
𝜕𝑔.
= 1 − tanh 𝑔.
n
= (1 − s…
n)
𝜕𝑔.
𝜕𝑏ℎ
=
𝜕(𝑈 ∗ 𝑥𝑠. + 𝑊 ∗ 𝑠.#€ )
𝜕𝑏ℎ
+
𝜕𝑏ℎ
𝜕𝑏ℎ
= 0 +
𝜕𝑏ℎ
𝜕𝑏ℎ
= 1
𝜕𝑔.
𝜕𝑈
= 𝑥𝑠. +
𝜕(𝑊 ∗ 𝑠.#€ + 𝑏ℎ)
𝜕𝑈
= 𝑥𝑠. + 0 = 𝑥𝑠.
𝜕𝑔.
𝜕𝑊
=
𝜕(𝑈 ∗ 𝑥𝑠. + 𝑏ℎ)
𝜕𝑊
+ 𝑠.#€
= 0 + 𝑠.#€ = 𝑠.#€
𝜕𝑔.
𝜕𝑠.#€
=
𝜕(𝑈 ∗ 𝑥𝑠. + 𝑏ℎ)
𝜕𝑠.#€
+ 𝑊
= 0 + 𝑊 = 𝑊
중간 함수에 대한 편미분
𝜕𝐸.
𝜕𝑏ℎ
=
𝜕𝐸.
𝜕𝑔.
∗
𝜕𝑔.
𝜕𝑏ℎ
= 𝑑ℎ ∗ (1 − s…
n
) ∗ 1
= 𝑑h𝑟𝑎𝑤
𝜕𝐸.
𝜕𝑈
=
𝜕𝐸.
𝜕𝑔.
∗
𝜕𝑔.
𝜕𝑈
= 𝑑h𝑟𝑎𝑤 ∗ 𝑥𝑠.
dbh 6
dWxh 7
𝜕𝐸.
𝜕𝑊
=
𝜕𝐸.
𝜕𝑔.
∗
𝜕𝑔.
𝜕𝑊
= 𝑑𝑦 ∗ V * (1 − s…
n
) ∗ 𝑠.#€
= 𝑑ℎ ∗ (1 − s…
n
) ∗ 𝑠.#€
= 𝑑h𝑟𝑎𝑤 ∗ 𝑠.#€
dWhh 8
3) 가중치 W가 loss(E)에 미치는 영향 계산
Wxh
xs
Whh
hs(t-1)
bh
x
x +
dWxh
xs
dWhh
hs(t-1)
𝒅𝒉𝒏𝒆𝒙𝒕
dbh
x
x +
6
7
8
9
BPTT (Back Propagation Through Time)
Why
hs
by
+ tanh
dWhy
dh
dby
+ tanhg
g
dhraw
2
3
4
5
ysx
dyx
1
ps
softmax
ps -1
Loss(E)
cross entropy
+
+
𝜕𝐸.
𝜕𝑔.
=
𝜕𝐸.
𝜕𝑠.
∗
𝜕𝑠.
𝜕𝑔.
= dℎ ∗ (1 − tanh 𝑔.
n
)
= 𝑑ℎ ∗ (1 − s…
n
)
dhraw 5
&'(
&*(••
=
&'(
&‘(
∗
&‘(
&’(••
= 𝑑𝑦 ∗ 𝑉 ∗ (1 − 𝑠.
n
) ∗ W
= 𝑑ℎ ∗ (1 − 𝑠.
n
) ∗ W
= 𝑑h𝑟𝑎𝑤 ∗ 𝑊
𝒅𝒉𝒏𝒆𝒙𝒕 9
13. 5) Sample함수로 다음 단어 예측 - 1
Sample 함수의 파라미터
• sample_ix = sample(hprev, inputs[0], 25)
• hprev : state (100, 1) 정보 (문장의 처음에 0으로 초기화) à xavier로 초기화 하면 좋아질까?
• Input[0] : input문장(5글자)의 첫번째 문자의 index (Hello à H à 5) (char_to_ix 에 저장된 index)
• 25 : input[0]를 입력으로 25번 loop를 돌면서 25개의 output 문자를 예측한다.
• 반환값 : 예측한 문자열의 index 배열 (1, 25)
• “[2, 6, 6, 7, 0, 12, 7, 10, 6, 3, 8, 0, 1, 2, 9, 11, 0, 12, 4, 9, 6, 8, 8, 0, 1]”
• ello World. Best Wisl.. B
Input[0] = 5
n = 0
= np.tanh(np.dot(Wxh, x) + np.dot(Whh, h) + bh)
y = np.dot(Why, ) + by
p = np.exp(y) / np.sum(np.exp(y))
(14, 1)
(14, 1)
(100, 1)
ix = np.random.choice(range(vocab_size), p=p.ravel())
H
x
h
y
p
1
2
3
ix4 [[ 0.19226331]
[-3.09023869]
[ 9.50352706]
[-2.42361632]
[-3.56830588]
[-4.5526632 ]
[-0.37720546]
[-1.39742306]
[-2.69937816]
[-0.43220833]
[-1.83925515]
[-1.69037687]
[-1.92273072]
[-4.32781988]]
y
[[ 9.03763871e-05]
[ 3.39220797e-06]
[ 9.99736255e-01]
[ 6.60682628e-06]
[ 2.10310292e-06]
[ 7.85886037e-07]
[ 5.11373042e-05]
[ 1.84358410e-05]
[ 5.01453928e-06]
[ 4.84005598e-05]
[ 1.18516200e-05]
[ 1.37541809e-05]
[ 1.09024659e-05]
[ 9.84028744e-07]]
p
Input[0]인 ‘H’를 입력으로 hidden layer에서 상태값
(0)를 적용한 결과 y를 계산하고
이를 확률로 변환한 p를 추출한다.
여기서 p는 각 단어별로 정답일 확률을 의미한다.
이 예제에서는 3번째 index 2가 가장 높으므로 ‘e’를
예측하였다.
무작위로 1개의 index를 선택하는데,
p에서 비율이 높은 것에 가중치를 많이
부여해서 선택될 확률이 놀게한다.
여기서는 예상대로 2(‘e’)를 선택하였다.
2
- P를 계산하는 과정 :
- Y에서 계산된 값을 지수적으로 확장하여 비정규
화된 값으로 만든다. (np.exp(y))
- 그리고 이 값을 다시 0~1 사이의 정규화된 값으
로 변경하여 확률로 변경한다.
e
2 3
4
14. Input[0] = 2
n = 0
H
x
h
y
p
ix
e
n = 1
e
x
h
y
p
ix
l
n = 2
l
x
h
y
p
ix
l
n = 3
l
x
h
y
p
ix
o
n = 4
o
x
h
y
p
ix
‘ ‘
n = 5
‘ ‘
x
h
y
p
ix
W
n = 24
.
x
h
y
p
ix
‘ ‘
ello World. Best Wisrld.
‘H’ 문자를 입력으로 나머지 25개의 문자
열을 예측한 결과
5) Sample함수로 다음 단어 예측 - 2
15. 6) Vanishing Gradient 문제
S0 S1 S2 S3 S4
Tanh(U*X + W*𝑺#𝟏 + bh)
Tanh(U*X + W*𝑺 𝟎 + bh)
Tanh(U*X + W*𝑺 𝟏 + bh)
S0 = 5
로 가정
Tanh(5) =
0.9
Tanh(0.9)
= 0.74
Tanh(0.74)
= 0.62
S0가 미치는 영향도가 점점
작아짐.
Vanishing gradient 문제
앞에서 이전 상태를 Time Step을 통해 전달하게 되면서,
Time Step이 많아지면 기존 상태값이 거의 0으로 변환되어
BPTT시에 오래된 상태값은 gradient가 거의 사라지는(0에 가까운) 문제가 발생하게 된다.
특히 RNN은 Time step이 많아지는 특성이 있으므로,
Vanishing Gradient는 먼 상태의 값이 현재결과에 거의 영향을 주지 못하는 문제가 발생한다.
이를 해결하기 위한 다양한 방법이 있는데,
• W 행렬을 적당히(?) 잘 초기화
• ReLU 함수 사용
• 가장 최선의 해결책은 Long Short-Term Memory (LSTM) 또는 Gated Recurrent Unit (GRU) 구조
를 사용 http://aikorea.org/blog/rnn-tutorial-3/