태그 보관물: Deep Learning

구글의 머신러닝 단기집중과정

구글에서 “머신러닝 단기집중과정“이란 온라인 교육 사이트를 오픈했습니다. 머신러닝의 기초와 선형회귀, 로지스틱 회귀에서부터 신경망으로 MNIST 이미지를 분류하는 것까지 다루고 있습니다(텐서플로와 여러 파이썬 과학 라이브러리를 사용합니다). 강의에서 제공되는 실습은 Colab의 Notebook을 이용하고 있어 온라인에서 바로 실습을 할 수 있습니다. 재미있는 것은 강의 영상이 한국어 더빙으로 제공됩니다.

머신러닝으로 만든 더빙과 몇몇 용어의 선택이 조금 어색하지만 누구나 무료로 들을 수 있는 한국어로 된 좋은 강의인 것 같습니다. 🙂

스크린샷 2018-03-01 오전 11.37.52

PyTorch 0.3.1 Release

파이토치PyTorch 0.3.1 버전이 릴리즈되었습니다. 주로 버그 수정과 성능 향상을 포함하고 있습니다. 자세한 변경사항은 릴리즈 노트를 참고하세요.

파이토치 0.3.1 부터는 CUDA 3.0, 5.0과의 호환성이 삭제되었고, CUDA 7.5를 위한 바이너리 설치가 제외되었습니다. 대신 CUDA 8, 9, 9.1용 바이너리 설치가 제공됩니다. 지원하는 파이썬 버전은 2.7, 3.5, 3.6 입니다.

# macOS (no GPU)
$ conda install pytorch torchvision -c pytorch

# Linux CUDA 8.0
$ conda install pytorch torchvision -c pytorch
# Linux CUDA 9.0
$ conda install pytorch torchvision cuda90 -c pytorch
# Linux CUDA 9.1
$ conda install pytorch torchvision cuda91 -c pytorch
# Linux CPU
$ conda install pytorch-cpu torchvision -c pytorch

지난 달 말에는 마이크로소프트의 CNTK 2.4 버전이 릴리즈 되었습니다. 자세한 사항은 릴리즈 노트를 참고하세요.

[Review] Hands-On Machine Learning with Scikit-Learn & TensorFlow

lrg 이 책의 번역을 시작한지 벌써 6개월이 훌쩍 넘어가 버렸습니다. 개인적인 핑계가 없는 것은 아니지만, 그럼에도 불구하고 이렇게 오랜 시간이 걸린 것은 번역 작업이 어떤 병렬화도 불가능한 노동 집약적인 일이기 때문일 것입니다 🙂 작업이 거의 마무리되어 가는 시점에 원서 전체에 대한 리뷰와 작업에 대한 기록을 위해 글을 남깁니다.

이 책은 500페이지가 넘어 두툼한 편이고, Scikit-Learn 라이브러리를 사용한 머신러닝Machine Learning텐서플로TensorFlow를 사용한 딥러닝Deep Learning 파트 두 부분으로 크게 나누어 집니다(실제 최근 프랑스어 판은 두 권의 책으로 출판되었다고 합니다). 분량만으로 비교했을 때에도 약간 딥러닝 쪽에 더 무게를 두고 있습니다. 간간히 Scikit-Learn과 텐서플로를 함께 다루고 있는 책들이 있는데, 아마도 딥러닝만을 설명하기엔 머신러닝 개념이 꼭 필요하기 때문인 것 같습니다. 물론 텐서플로만 다루는 책이더라도 도입부에 회귀와 분류 모델을 간단히 텐서플로로 만들어 봄으로써 머신러닝에 대한 개념을 다루고 진행하는 것이 일반적입니다. 이 책은 두 라이브러리를 모두 다루고 있으며 유사한 책 중에서는 가장 포괄적이고 세세한 내용을 담고 있습니다. 또 이론서와 실용서의 중간 형태라고 볼 수 있습니다. 수식없이 코드만 있지 않고, 코드는 없고 이론만 늘어 놓지도 않습니다.

작업을 시작하고 나서 7월, 10월에 원서의 내용이 크게 개정되었습니다. 주로 딥러닝 파트였으며, 원서의 여러가지 오류 때문이기도 하지만 아마도 이 분야의 변화가 빠른 것도 한 몫 했을 것입니다. 바뀐 부분을 PDF로 받았는데 책으로 옮겨 적기에는 너무 양이 많아 출력해서 책에 오려 붙이고 작업을 진행했습니다. 그 외에도 괴장히 많은 에러타가 있고, 아직 컨펌되지 않은 에러타도 남아 있습니다(에러타가 많이 발견되었다는 것은 그 만큼 높은 인기를 반증합니다). 최근에는 에러타와 개정판에도 언급되지 않은 변경사항이 사파리온라인에서 발견되어 저의 멘탈을 붕괴 직전까지 몰고 가기도 했습니다. 😦

이 책이 다른 책과 구별되는 한 장을 고르라고 한다면 저는 2장을 선택할 것 같습니다. 2장은 회귀 모델을 사용해 머신러닝 프로젝트의 준비에서부터 런칭까지 모든 단계를 짚어가고 있습니다. 이 책에는 특성 공학feature engineering에 대한 장을 따로 할당하지 않았는데 2장에서 이런 부분이 다소 해소됩니다. 다른 책에서도 프로젝트 운영에 대한 가이드라인이 다소 포함되어 있기도 하지만, 여기에서처럼 실제 프로젝트를 진행하듯이 자세히 기술되어 있지는 않습니다. 이런 부분은 저자의 프로젝트 경험을 엿볼 수 있는 좋은 사례인 것 같습니다.

이 책은 구성상 독특한 점이 두 가지가 있습니다. 첫째는 다른 책들과는 달리 샘플 코드 전체를 싣지 않고 있는 것입니다. 비교적 많은 주제에 대해 상세히 논하고 있기 때문에 만약 코드를 모두 썼다면 이보다 훨씬 더 두꺼운 책이 되었을 것입니다. 설명을 위해 꼭 필요한 코드 부분만 실었으며 전체 코드는 깃허브github.com의 주피터 노트북Jupyter Notebook을 참고하도록 안내하고 있습니다. 둘째, 각 장의 끝에 연습문제를 포함하고 있습니다. 그렇다고 이 책이 대학 교재스러운 편집 구성을 가지는 것은 아닙니다. 일반 컴퓨터 과학 도서에서 연습문제를 가진 경우는 드물기 때문에 신선하기도 하고 저자의 노력을 느낄 수 있습니다. 연습문제는 크게 본문의 내용을 질문하는 것과 실습을 하는 것, 두 종류로 나누어 집니다. 내용에 대한 질문의 답은 책의 부록에 실려 있습니다. 실습 문제는 깃허브의 장별 주피터 노트북 말미에 포함되어 있습니다. 다만 아직 모든 연습문제의 답이 올려져 있지 않고 점진적으로 추가되고 있습니다. 번역서가 출간될 쯤에는 깃허브의 주피터 노트북의 내용도 모두 한글로 번역되어 제공됩니다. 추후 업데이트되는 연습문제도 함께 번역이 될 것입니다.

Scikit-Learn을 이용해서는 회귀, 분류에 대한 기본 내용으로 시작해서 서포트 벡터 머신Support Vector Machine, 결정 트리Decision Tree, 앙상블emsemble, 차원 축소Dimensionality Reduction까지 다룹니다. 아무래도 ‘파이썬 라이브러리를 활용한 머신러닝‘처럼 머신러닝 파이프라인의 모든 부분을 다루기엔 지면이 부족합니다. 하지만 다루는 모델의 이론(수식)을 충분히 설명하고 예제 코드를 병행하고 있습니다. 텐서플로를 사용해서는 기본 인공 신경망과 텐서플로에 대한 소개를 먼저 시작합니다. 그리고 심층 신경망을 학습하기 위해 당면한 문제들을 해결하는 여러가지 방법을 소개합니다. 모델 재사용, 여러가지 최적화 알고리즘, 초기화, 규제 등입니다. 보통 GPU나 분산처리 부분은 딥러닝 책의 말미에 나오는 경우가 많은데 이 책에서는 합성곱Convolution 신경망 보다도 먼저 나오고 비중이 비교적 큽니다. 그 다음 합성곱 신경망Convolution Neural Networks에서 합성곱, 패딩, 스트라이딩에 대한 설명 뿐만 아니라 LeNet-5, AlexNet, GooLeNet, ResNet 구조를 상세히 설명하고 있습니다. 순환 신경망Recurrent Neural Networks에서는 직접 간단한 RNN 연산을 만들어 보면서 순환 신경망에 대한 이해를 돕고 있으며, LSTM, GRU와 기본적인 기계번역 RNN 구조까지 설명하고 있습니다. 그 다음 오토인코더Autoencoder, 강화학습Reinforcement Learning을 다루는 장으로 이어집니다.

아래 장별 제목을 옮겨 놓았습니다. 책에 관련하여 궁금한 점이나 리뷰, 추천사에 의향이 있으시면 언제든지 댓글이나 메일 주세요. 앗 그리고 새해 복 많이 받으세요! 🙂

  1. 한눈에 보는 머신러닝
  2. 머신러닝 프로젝트 시작부터 끝까지
  3. 분류
  4. 모델 훈련
  5. 서포트 벡터 머신
  6. 결정 트리
  7. 앙상블 학습과 랜덤 포레스트
  8. 차원 축소
  9. 텐서플로 시작하기
  10. 인공 신경망 소개
  11. 심층 신경망 훈련
  12. 다중 머신과 장치를 위한 분산 텐서플로
  13. 합성곱 신경망
  14. 순환 신경망
  15. 오토인코더
  16. 강화학습
  • 연습문제 정답
  • 머신러닝 프로젝트 체크 리스트
  • SVM 쌍대 문제
  • 자동 미분
  • 인기 있는 다른 인공 신경망 구조

[Review] ML with TensorFlow

title매닝Manning 출판사의 텐서플로우 책인 “Machine Learning with TensorFlow“가 거의 원고를 마무리하고 곧 출간될 예정입니다. 이 책의 최신 MEAP 버전을 바탕으로 간략히 리뷰를 작성합니다.

이 책은 텐서플로우를 이용하여 머신 러닝 알고리즘을 작성하는 챕터들로 구성되어 있습니다. 머신 러닝의 관점에서도 텐서플로우의 관점에서도 모두 입문서에 해당합니다. 크게 세가지 파트로 나뉘어져 있으면 첫 번째는 머신 러닝과 텐서플로우의 소개, 두 번째 파트는 회귀, 분류, 군집, 히든 마코브Hidden Markov 모델을 소개합니다. 마지막 세 번째 파트에서는 오토인코더autoencoder, 강화 학습, CNN, RNN을 다룹니다.

1장에서 대부분의 다른 책들 처럼 머신 러닝에 대한 개괄적인 소개를 하고 있습니다. 모델, 파라미터, 학습, 추론(여기서 말하는 추론은 통계의 추론이 아니고 머신 러닝의 예측을 말합니다), 특성 등을 포함합니다. 그리고 L1, L2 노름을 포함하여 일반화된 노름norm에 대해서 잘 설명하고 있습니다. 그리고 세가지의 큰 머신 러닝 분류인 지도 학습, 비지도 학습, 강화 학습을 사례를 들어 차이를 설명합니다. 씨아노Theano, 토치Torch, 카페Caffe에 대해 간략히 소개하고 텐서플로우를 사용하려는 이유와 소개를 합니다. 그런데 scikit-learn이 비교적 저수준(?) 라이브러리이기 때문에 텐서플로우 같은 고수준(?) 라이브러리를 쓴다는 말이 좀 어색하네요. 이 챕터의 마지막에는 책 전체에서 챕터별로 각각 어떤 알고리즘들을 다룰 것인지를 그림과 표로 요약해서 보여주고 있습니다. 이런 정리는 책의 전체 내용을 쉽게 파악하게 도와주므로 아주 좋은 것 같습니다.

계속 읽기

Review Paper of DL, RL

거의 동시에 딥러닝과 강화학습에 관한 리뷰 페이퍼가 각각 공개되었습니다. 하나는 “On the Origin of Deep Learning“(1702.07800 pdf)로 80페이지가 넘습니다. 퍼셉트론부터 시작해서 최근의 뉴럴 네트워크의 다양한 기술들을 요약하고 있습니다. 볼츠만 머신, 딥 빌리프, CNN, RNN, GAN, 최적화 등 다양한 주제를 망라하고 있습니다. 시작을 아리스토텔레스까지 거슬러 올라간 건 애교로 봐야할까요? 🙂

다른 하나는 “Deep Reinforcement Learning: An Overview“(1701.07274 pdf)입니다. DQN, Policy Gradient 와 강화학습이 적용된 다양한 어플리케이션을 소개하고 있습니다. 레퍼런스만 절반이라 강화학습 이론 자체보다는 관련 리소스를 확인하는 용도로 좋을 것 같습니다.

PyTorch: New Cool DL Library

0120-sdt-github

(업데이트) 파이토치는 토치(Torch)의 코어 C 라이브러리를 공유하고 있으며 대략 2016년 5월 경에 시작된 것으로 추측됩니다. 텐서플로우도 다이나믹 그래프를 위한 시도를 하고 있으나(TensorFlow Fold) 아직 페이퍼외에 코드로 공개된 것은 없습니다.

널리 사용되는 딥러닝 라이브러리 중 하나는 페이스북에서 많이 사용하는 토치(torch)입니다. 하지만 루아 스크립트 인터페이스 때문에 처음 딥러닝을 시작하는 사람들에게 선택되기는 쉽지 않습니다. 그와중에 구글이 파이썬 인터페이스를 전면으로 내세운 텐서플로우로 딥러닝 프레임워크 시장의 선두로 올라섰습니다. 하지만 앞으로 이야기가 조금 달라질 수 있을것 같습니다. 바로 텐서플로우보다 더 파이써닉한 파이토치(PyTorch)가 공개되었기 때문입니다. 이름을 보아서는 토치에 파이썬 인터페이스를 추가한 것으로 오해할 수 있지만, 이 라이브러리는 넘파이(NumPy) 정도를 제외하고는 거의 의존성이 없으며 텐서 연산을 위한 C++ 코드를 제외하고는 거의 모두 파이썬 구현으로 만들어졌습니다. 이는 대부분의 코드가 C++ 로 구현되어 있고 인터페이스를 파이썬으로 가진 텐서플로우를 비롯한 다른 라이브러리들과는 큰 차이가 납니다. 웹사이트에서 주장하는 바 그대로 “Python First” 입니다.

파이토치의 주요 장점은 모든 텐서의 연산에 대해 자동으로 그래디언트를 계산해 주는 Autograd, NumPy/SciPy 등과의 뛰어난 호환성, 깔끔한 코드 등입니다. 하지만 가장 관심을 끄는 것 중 하나는 다이나믹하게 컴퓨테이션 그래프를 만들어 주는 기능입니다. 즉 텐서플로우를 비롯한 다른 라이브러리들처럼 그래프를 정의하고 실행하는 것이 아니고 코딩되는 대로 그래프가 점진적으로 만들어지는 것입니다. 이런 장점을 가진 라이브러리로는 일본에서 만든 체이너(Chainer)가 있고 최근 카네기멜론 대학의 Clab 에서 공개한 DyNet(말 그대로 다이나믹 넷이죠), 그리고 MXNet을 개발하는 DMLC 에서 최근에 공개한 MinPy 등이 있습니다. 실제로 파이토치의 일부 기능은 체이너의 포크에서 시작되었다고 합니다. 이 프로젝트는 페이스북의 서미스 친탈라(Soumith Chintala)와 아담 파스케(Adam Paszke)가 관리하고 있으며 혼돈될 수 있지만 휴 퍼킨스(Hugh Perkins)가 만든 토치 래퍼인 pytorch와는 다릅니다.

기존의 네트워크와 앞으로의 연구가 얼마나 파이토치로 포팅되어 나올지가 궁금합니다. 자세한 파이토치의 기능은 예제를 뜯어 보면서 정리해서 올리겠습니다. 파이토치는 아직 PyPI 에 올라가 있지는 않지만 비교적 쉽게 설치가 가능합니다. 다만 아직 윈도우 버전이 준비되어 있지 않고 맥에서는 GPU 지원이 되지 않습니다.

# conda (linux, osx)
$ conda install pytorch torchvision -c soumith

# pip : linux + python2.7 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.6.post22-cp27-cp27mu-linux_x86_64.whl 
$ pip install torchvision

# pip : linux + python2.7 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.6.post22-cp27-cp27mu-linux_x86_64.whl 
$ pip install torchvision

# pip : linux + python3.5 + cuda7.5
$ pip install https://s3.amazonaws.com/pytorch/whl/cu75/torch-0.1.6.post22-cp35-cp35m-linux_x86_64.whl
$ pip install torchvision

# pip : linux + python3.5 + cuda8.0
$ pip install https://s3.amazonaws.com/pytorch/whl/cu80/torch-0.1.6.post22-cp35-cp35m-linux_x86_64.whl
$ pip install torchvision

# pip : osx + python2.7
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.6.post22-cp27-cp27m-macosx_10_7_x86_64.whl 
$ pip install torchvision 

# pip : osx + python3.5
$ pip install https://s3.amazonaws.com/pytorch/whl/torch-0.1.6.post22-cp35-cp35m-macosx_10_6_x86_64.whl 
$ pip install torchvision

AI == Deep Learning?

딥러닝(Deep Learning)은 인공지능(Artificial Intelligence)과 같은 건가요? 라고 누가 묻는다면 조금 멈칫거릴 것 같습니다. 두 단어를 모두 많이 쓰기도 하고 듣기도 했지만 차이에 대해선 깊에 생각해 본적이 없었던 것 같습니다. 아마도 다른 사람들도 이를 혼용해서 부르거나 각기 나름대로 구분해서 생각할 것 같은데요. KD너겟(KDnuggets)에서 이와 관련된 글이(Is “Artificial Intelligence” Dead? Long Live Deep Learning?!?) 실렸습니다. 페드로 도밍고스(Pedro Domingos) 교수를 비롯해서 7명의 전문가에게 나름대로 두 단어의 정의를 부탁했습니다.

ai-ml-dl

출처: KD너겟 홈페이지

사람마다 조금씩 바라보는 시각이 다르지만 대체적으로 큰 틀에서는 딥러닝은 머신러닝(Machine Learning)의 부분 집합이며 인공지능은 머신러닝을 포괄하는 큰 의미로 생각하고 있습니다. 따라서 딥러닝은 인공지능의 동의어도 아니고 인공지능을 대체하는 개념도 아닙니다. 최근의 성과에 힘입어 미디어에서 딥러닝과 인공지능을 혼용하여 사용하지만 딥러닝은 딥 뉴럴 네트워크(Deep Neural Networks)를 사용한 머신러닝의 한 분야입니다.

딥러닝이 주로 인공지능 분야에 활용되고 있지만 인공지능은 딥러닝 이외에도 강화학습(reinforcement learning), 몬테카를로 트리탐색(Monte Carlo tree search), 유전자 알고리즘(Genetic algorithm) 등과 같은 기술이 함께 사용되고 있다는 점을 설명하고 있습니다. 인공지능은 또 머신러닝과 상관없는 문제해결(Problem Solving), 검색(Search), 지식표현(Knowledge Representation) 등 많은 다른 분야와 연관되어 있다는 점을 페드로 도밍고스 교수가 지적하고 있습니다.

그는 딥러닝은 특별히 이미지(비전), 텍스트(언어), 음성 등의 분야에서 주로 사용되고 있으며 구조화 되지 않은 입력 데이터를 이용해서 예측을 하는 데는 여전히 일반적인 머신러닝 알고리즘인 앙상블(Ensemble) 메소드나 서포트 벡터 머신(SVM) 등이 좋은 선택이라고 말하고 있습니다.

트위터의 휴고 라로쉘(Hugo Larochelle)도 인공지능은 궁극적인 목표이고 딥러닝을 그에 다다르기 위한 수단 중 하나라고 정의하고 있습니다. 소울 해커스 랩(Soul Hackers Labs)의 CEO 카를로스 아구에타(Carlos Argueta)는 자연어 처리나 컴퓨터 비전에 대해 이야기하면 사람들이 하나 같이 ‘딥러닝을 사용하나요?’ 라고 묻는데 아주 피곤하다고 하네요. 🙂

(업데이트) 7월말에 엔비디아(Nvidia) 블로그에 이와 관련된 글(What’s the Difference Between Artificial Intelligence, Machine Learning, and Deep Learning?)이 실렸습니다. 이 글에서도 딥러닝은 인공지능이나 머신러닝 보다 최근에 각광받기 시작했으며 머신러닝의 한 분야임을 잘 설명하고 있습니다.

deep_learning_icons_r5_png-jpg

 출처: 엔비디아 블로그

Montreal DL Summer School Lectures!

이달 초에 몬트리올에서 진행됐던 딥러닝 서머스쿨의 동영상이 공개되었습니다. 강의자들을 보면 제프 딘(Jeff Dean), 요슈아 벤지오(Yoshua Bengio), 조경현 교수 등이 있습니다. 아직 발표자료와 동영상이 모두 매치되지는 않았습니다. 많은 사람들이 환영을 하는 만큼 놓칠 수 없는 자료 같습니다.

스탠포드 대학에서도 다음달 딥러닝 서머스쿨을 연다고 하는데요. 이 영상도 공개되었으면 하는 바램입니다. 그리고 9월 24~25일에 열리는 AI 온라인 컨퍼런스인 AI with the Best에 페드로 도밍고(Pedro Domingos) 교수가 합류했다는 소식입니다.

DL with Neural Networks and TensorFlow Introduction

예전에 소개해 드렸던 ‘ML with Python‘ 동영상 시리즈를 만든 해리슨 킨슬리(Harrison Kinsley)가 텐서플로우와 딥러닝에 관한 새로운 동영상 시리즈를 유투브에 올리고 있습니다. 정말 대단합니다!

지금까지는 총 6개가 업로드되었습니다.

DL Summer Seminar at Barcelona

UPC TelecomBCN이 주관하는 딥러닝 서머 세미나가 지난 달에 바르셀로나에서 열렸었습니다. 5일간 열린 이 세미나의 슬라이드, 코드 그리고 강의 동영상이 공개되어 있습니다. 제가 번역한 책 ‘First Contact with TensorFlow’의 저자 Jordi Torres 교수도 강의자 명단에 포함되어 있네요. 아마도 저술한 책의 내용을 바탕으로 강의를 진행한 것 같습니다. 🙂