지난 몇 년 동안 파이썬의 인기가 점점 높아지고 있다. 특히 머신러닝과 딥러닝에서 파이썬의 선호가 높았는데, 파이썬의 풍부한 머신러닝·딥러닝 라이브러리 목록, 최적화된 구현, 확장성 및 다양한 기능에 많은 인기를 끌었다.
그런데, 머신 러닝 애플리케이션을 만들 때 '파이썬'이 유일한 답일까? 자바스크립트를 이용해 머신 러닝 프로그래밍을 하는 사람들이 많아지고 있다고 벤처비트가 보도했다.
자바스크립트가 파이썬의 풍부한 머신 러닝 환경을 대체하는 것은 아니다. 하지만 자바스크립트를 활용한 머신 러닝 기술을 보유해야 하는 4가지 이유가 있다.
1. 개인 기계 학습
대부분의 머신 러닝 애플리케이션은 클라이언트-서버 구조에 의존한다. 사용자는 기계 학습 모델이 실행 중인 곳에 데이터를 전송해야 한다. 이러한 클라이언트-서버 구조는 개발자가 자신의 모델을 서버에서 실행할 수 있고, 웹 API를 통해 사용자 애플리케이션에서 사용할 수 있게 하는 이점이 있다. 이느 개발자들이 사용자 기기에서 실행할 수 없는 매우 큰 신경망을 이용하는 것을 가능하게 한다.
하지만 많은 경우 사용자의 장치에서 머신러닝을 구동하는 게 바람직하다. 예를 들어 개인 정보 보호 문제로 인해 사용자는 자신의 사진, 개인 채팅 메시지 및 이메일을 컴퓨터 학습 모델이 실행 중인 서버로 전송하지 않을 수 있다.
다행히 모든 머신 러닝 응용 프로그램이 비싼 서버를 이용해야 하는 것은 아니다. 많은 모델을 압축해서 사용자 기기에서 실행되도록 할 수 있다. 또 모바일 장치 제조 업체들이 로컬 딥 러닝 추론을 지원하기 위해 장치에 칩을 장착하고 있다.
하지만 문제는 다수의 사용자 기기가 파이썬 머신 러닝을 지원하지 않는다는 것이다. MacOs 및 대부분의 Linux 버전은 파이썬이 설치되어 있지만, 머신 러닝 라이브러리는 별도로 설치해야 한다. 윈도우 사용자는 수동 설치가 필요하다. 또한 모바일 운영 체제의 경우 파이썬 인터프리터에 대한 지원이 부족하다.
반면 자바스크립트는 모든 최신 모바일 브라우저 및 데스크톱 브라우저에서 이를 기본으로 지원한다 즉 대부분의 데스크톱 및 모바일 장치에서 자바스크립트 기반 머신 러닝 애플리케이션을 실행할 수 있다는 것이다.
이미 자바스크립트 기반 머신 러닝 라이브러리가 여러 개 존재한다. 구글의 유명한 머신러닝·딥러닝 라이브러리의 자바스크립트 버전인 텐서플로.js(TensorFlow.js)가 있다. 텐서플로.js 데모 페이지에 들어가면 자바스크립트 머신 러닝을 사용한 다양한 예제를 볼 수 있다. 이는 클라우드에 데이터를 보내지 않고, 기기에서 머신러닝 학습 모델을 실행한다. 또 추가 소프트웨어를 설치하지 않아도 된다는 장점이 있다.
이 밖에도 ML5.js, 시냅틱(Synaptic), 브레인.js(Brain.js) 등 잘 알려진 강력한 자바스크립트 머신 러닝 라이브러리가 있다.
2. 빠르고 맞춤화된 ML 모델
기기 내에서 머신 러닝을 구동할 때 개인정보 보호뿐만 아니라 속도에서의 이점도 얻을 수 있다. 일부 응용 프로그램은 장치에서 서버로 데이터를 전송하는 데 걸리는 시간이 지연되며 사용자 환경에 방해가 될 수 있다. 기기 내에서 머신러닝을 구동할 경우 인터넷에 연결되지 않은 경우에도 컴퓨터 학습 모델을 실행할 수 있다. 이러한 경우 사용자의 장치에서 실행되는 자바스크립트 머신 러닝 모델을 사용하면 매우 편리하다.
자바스크립트 머신 러닝의 또 다른 중요한 용도는 '모델 사용자 지정'이다. 예를 들어 각 사용자 언어 기본 설정에 맞게 조정되는 텍스트 생성 머신 러닝 모델을 개발할 때, 사용자당 하나의 모델을 서버에 저장하고 사용자 데이터에 대해 학습할 수 있다. 따라서 사용자의 성장에 따라 서버에 추가 로드가 발생할 수 있으며, 잠재적으로 중요한 데이터를 클라우드에 저장해야 한다.
두 번째 방법은 서버에 기본 모델을 만들고, 사용자의 장치에 복사본을 만들어 자바스크립트 머신 러닝 라이브러리를 사용해 사용자의 데이터로 모델을 미세 조정하는 것이다. 이 경우 사용자의 장치에 데이터를 보관하기 때문에 서버로 데이터를 전송할 필요가 없다. 또 추가 추론 및 교육 로드를 클라우드에 보내지 않음으로써 서버 리소스를 확인할 수 있다. 사용자는 서버와의 연결이 끊어졌을 때도 머신 러닝 기능을 사용할 수 있다는 장점이 있다.
3. 웹 및 모바일 애플리케이션에서 머신 러닝을 쉽게 통합
자바스크립트 머신러닝은 모바일 애플리케이션과 손쉽게 통합할 수 있다는 장점이 있다. 파이썬은 모바일 운영체제에서의 지원이 아직 초기 단계에 있다. 반면 코도바(Cordova)와 아이오닉(Ionic)과 같은 다양한 크로스 플랫폼 자바 스크립트 모바일 앱 개발 툴이 이미 존재한다.
이러한 도구는 한 번의 코드 작성으로 iOS 및 Android 장치용으로 배포할 수 있어 인기를 끌고 있다. 서로 다른 운영체제에서 코드를 호환하기 위해 크로스 개발 도구는 '웹 뷰'를 시작한다. 웹 뷰는 자바스크립트 코드를 실행할 수 있고 대상 운영 체제의 네이티브 응용 프로그램에 포함될 수 있는 브라우저 객체이다. 이러한 브라우저 객체는 자바스크립트 머신 러닝 라이브러리를 지원한다.
다만 유명 크로스 플랫폼 모바일 앱 개발 프레임워크인 리액트 네이티브(React Native)는 애플리케이션 실행을 웹 뷰에 의존하지 않는다. 이에 구글은 리액트 네이티브용 텐서플로.js 특별 버전을 제공한다.
모바일 앱을 네이티브로 작성한 뒤 자바스크립트 머신 러닝 코드를 통합하려는 경우, 내장된 브라우저 객체(예: iOS의 WKWebView)를 앱에 추가할 수 있다.
텐서플로 라이트 및 코어 ML과 같은 모바일 애플리케이션을 위한 머신 러닝 라이브러리도 있다. 그러나 앱을 개발하는 모바일 플랫폼에는 네이티브 코딩이 필요하다. 반면 자바스크립트 머신 러닝은 브라우저용 머신 러닝 응용 프로그램 버전을 이미 구현한 경우, 거의 또는 전혀 변경하지 않고도 모바일 응용 프로그램으로 쉽게 포팅할 수 있다.
4. 서버에서 자바스크립트 시스템 학습
머신 러닝의 중요 과제 중 하나는 모델을 훈련하는 것이다. 특히 학습에 여러 시기에 걸친 값비싼 역 전파 계산이 필요한 딥 러닝의 경우 더 중요하다. 사용자 장치에서 딥 러닝 모델을 교육하는 것도 불가능하지는 않지만, 신경망의 크기가 크면 몇 주 또는 몇 달이 소요될 수 있다.
파이썬의 머신 러닝 모델은 서버 측 훈련에 더 적합하다. 서버 클러스터에 부하를 확장 및 분산하여 교육 프로세스를 가속할 수 있다. 이란 모델이 교육되면 이를 압축하고 추론을 위해 사용자 장치에 전달할 수 있다. 다행히 다른 언어로 작성된 머신 러닝 라이브러리가 호환성이 높기 때문에, 텐서플로 또는 파이썬을 위한 케라스(Keras for Python)으로 딥 러닝 모델을 훈련 시키고, JSON 또는 HDF5와 같은 여러 언어 독립적 형식 중 하나로 저장할 수 있다. 이후 저장된 모델을 사용자의 장치로 전송해 텐서플로.js 또는 다른 자바스크립트 딥 러닝 라이브러리로 불러올 수 있다.
서버 측 자바스크립트 머신 러닝 역시 성숙기에 접어들고 있다. 자바스크립트 애플리케이션 서버 엔진이 노드.js(Node.js)에서 자바스크립트 머신러닝 라이브러리를 실행할 수 있다. 텐서플로.js의 경우 노드.js를 실행하는 서버에 적합한 특별한 버전을 가지고 잇다. 텐서플로.js와 상호작용하기 위해 사용되는 자바스크립트 코드는 브라우저에서 실행되는 애플리케이션에 사용되는 것과 동일하다. 그러나 백그라운드에서 라이브러리는 훈련과 추론 속도를 높이기 위해 서버의 특수 하드웨어를 사용한다.
또 다른 인기파이썬 머신 러닝 라이브러리인 파이토치(PyTorch)는 아직 공식적으로 자바스크립트를 구현하지는 않지만, 오픈 소스 커뮤니티에서 이 라이브러리를 위한 자바스크립트 바인딩을 개발한 바 있다.
노트.js를 통한 머신 러닝은 꽤 최근 나온 것이지만, 웹과 모바일 애플리케이션에 머신 러닝 기능을 추가하는 것에 대한 관심이 증가하며 빠르게 발전하고 있다. 또 자바스크립트 머신 러닝 커뮤니티가 계속해서 성장하고 툴이 성숙해짐에 따라, 웹 개발자들에 대한 채택이 늘어날 수 있다.
[저작권자ⓒ CWN(CHANGE WITH NEWS). 무단전재-재배포 금지]