MIT의 새로운 강좌인 ‘Deep Learning for Self-Driving Cars‘ 가 온라인으로 제공되고 있습니다. 슬라이드와 유투브 동영상 뿐만 아니라 코스 페이지에 누구나 가입을 할 수 가 있는데요. 가입을 하게 되면 실제 과제에 참여할 수 있습니다. 과제는 자바스크립트 기반으로 자율 주행 시뮬레이션을 하는 딥트래픽(DeepTraffic) 프로젝트이며 이미 리더보드에 순위가 매겨지기 시작했습니다. 딥트래픽은 OpenAI의 안드레이 카패시(Andrej Karpathy)가 만든 ConvNetJS 라이브러리를 사용합니다. 이런 이유는 이 강좌가 심지어 프로그래머가 아닌 사람들까지도 대상으로 하기 때문입니다. 브라우저와 텍스트 편집기만 있으면 필요한 모든 것이 준비가 된 셈입니다. 실제 핸들 스티어링의 데모인 딥테슬라(DeepTesla)도 볼 수 있습니다. 전체 강좌는 2회가 진행되었으므로 아직 늦지 않았습니다!
태그 보관물: ConvnetJS
Keras.js: run dl model with GPU
케라스(Keras)로 훈련된 모델을 브라우저에서 실행시킬 수 있는 자바스크립트 라이브러리 Keras.js 가 공개되었습니다. 케라스로 만든 모델을 json 으로 출력하고 훈련된 파라메타는 HDF5로 저장합니다. 그런 후에 Keras.js 에서 제공하는 인코더로 훈련된 파라메타를 자바스크립트가 읽을 수 있도록 직렬화하여 모델 json과 함께 브라우저로 로드하여 사용합니다. Keras.js 는 WebGL 자바스크립트 라이브러인 weblas 를 사용하고 있어서 브라우저에서 GPU 가속을 사용할 수 있습니다. 기본으로 제공되는 모델 파라메타는 MNIST, ResNet50, Inception V3 등이 있습니다.
콘볼루션 뉴럴 네트워크를 훈련시킬 수 있는 자바스크립트 라이브러리로는 OpenAI 안드레이 카패시(Andrej Karpathy)의 ConvNetJS 가 유명합니다. 하지만 Keras.js 는 콘볼루션 뿐만 아니라 LSTM 모델 등 다양한 모델을 지원한다는 게 장점인 것 같습니다. 이전에 소개했던 regl-cnn 보다도 훨씬 발전된 라이브러리로 보입니다. 다양한 레이어와 활성화 함수를 구현한 Keras.js 의 소스는 깃허브에 MIT 라이센스로 공개되어 있습니다.
(업데이트) Keras.js 를 사용하여 브라우저에서 웹캠으로 찍은 이미지를 분류하는 데모가 공개되었습니다. ResNet50을 사용하였고 로딩되는데 조금 시간이 걸리지만 크롬 브라우저에서 잘 작동이 됩니다. 왼쪽 화면이 웹캠 영상이고 오른쪽 이미지가 대략 5초마다 찍힌 스샷 이미지입니다. 스샷이 찍히면 자동으로 아래쪽에 어떤 물체인지 분류가 됩니다.
ConvNet with WebGL
WebGL을 사용하여, 즉 브라우저에서 GPU 가속을 사용하여 콘볼루션 뉴럴 네트워크를 구현한 데모가 공개되었습니다. 이곳에서 파이어폭스나 크롬 브라우저로 직접 테스트해 보실 수 있습니다. 이 데모의 깃허브에 조금 자세한 설명이 들어 있습니다. MNIST 학습은 텐서플로우로 한 후에 파라메타들를 바이너리로 저장하여 자바스크립트에서 읽어들여 사용했습니다.
자바스크립트에서 콘볼루션 뉴럴 네트워크를 구현한 것으로 잘 알려진 것은 스탠포드의 안드레이 카패시(Andrej Karpathy)가 만든 ConvNetJS가 있습니다. 이 데모에서는 순수한 자바스크립트로만 구현한 것이 아니고 WebGL 래퍼인 regl 라이브러리를 사용하여 GPU 가속을 이용한 점이 돋보입니다. 다른 기술들이 그렇듯이 딥 러닝 분야도 브라우저를 통해 많이 응용될 수 있을 것 같습니다.
텐서플로우 Playground
구글에서 뉴럴 네트워크 모델링을 브라우저에서 멋진 비주얼라이제이션을 통해 맛볼 수 있게 한 재미있는 사이트를 공개했습니다. 현재 알고리즘은 백프로파게이션(backpropagation)이 디폴트로 되어 있습니다. 좌측에 몇가지 테스트 데이터셋을 고를 수 있고 히든 레이어는 6개까지 추가시킬 수 있습니다. 각 레이어에 뉴런은 8개까지 늘릴 수 있습니다.
상단에는 러닝속도(learning rate)와 액티베이션(activation) 함수, 레귤러리제이션(regularization) 방식, 레귤러리제이션 정도를 선택할 수 있습니다. 액티베이션 함수는 하이퍼볼릭 탄젠트(tanh), 시그모이드(Sigmoid), 선형(Linear), 렐루(ReLU) 중 하나를 선택할 수 있고 레귤러리제이션은 L1, L2 중 하나를 선택할 수 있습니다. 분류(Classification)를 선택하면 4개의 데이터 셋이 있고 회귀분석(Regression)을 선택하면 2개의 데이터 셋 중 하나를 고를 수 있습니다.
오렌지, 블루 두가지의 데이터 종류를 구분합니다. 좌상단의 시작 버튼을 누르면 각 뉴런에서 어떤 종류의 데이터에 대한 가중치가 높아지는지를 시각적으로 확인하실 수 있습니다. 사실 이 프로그램은 텐서플로우를 이용한 것은 아니고 자바스크립트로 작성되어(정확히는 타입스크립트) 브라우저에서 실행됩니다.
자바스크립트에서 머신러닝을 수행하려는 시도가 많이 있습니다. 그 중에서도 가장 유명한 것은 ConvNetJS 입니다.