본문 바로가기

[내가 읽은 책]인공지능, 머신러닝, 딥러닝 입문_78

In 1979, Kunihiko Fukushima introduced the Neocognitron based on neurophysiological theories, which became the foundation of CNN. CNN mimics the human visual perception process and is used in image processing and speech recognition. It extracts and classifies features by repeatedly performing filtering, activation, and pooling. Pooling methods include max pooling, average pooling, and stochastic pooling, and overfitting is reduced through dropout algorithms and regularization techniques.

딥러닝의 핵심기술/ 컨볼루션 신경망

1979년 쿠니히코 후쿠시마Kunihiko Fukushima는 최초로 인공신경망에 신경생리학 이 론을 적용한 네오코그니트론 Neocognitron 모델을 발표한다. 네오코그니트론 모델은 신경생리학 분야에서 노벨상을 수상한 데이비드 허블과 토르스텐 위젤Torsten Wiesel 의 연구에 직접적인 영향을 받았다. 허블과 위젤의 연구는 고양이의 시각 과정에 서 뇌의 시각 피질의 동작 구조를 밝힌 것이다. 후쿠시마의 네오코그니트론 모델 은 컨볼루션 신경망Convolutional Neural Network의 시작이었다.

사람의 시각인지 과정을 모방한 컨볼루션 신경망은 태생적으로 컴퓨터 비전 분야 에서 독보적인 방법으로 사용되고 있다. 다양한 형태의 데이터에서 원하는 특성을 추출하는 데 탁월한 성능을 보여주는 컨볼루션 기술은 신호 처리나 음성인식 분야 등 여러 분야에서 활용되고 있다.

이미지 처리나 신호 분석 분야에서 컨볼루션 기법을 시용하는 이유는 원본 이미지 나 음파 등의 시그널에 섞여 있는 특성을 분리하고 추출하는 데 있다. 이를 위해 필터 커널이라는 것을 이용한다. 예를 들면, 디지털 이미지에서 어떤 물체의 경계 선 중 수직 성분의 에지edge나 같은 톤으로 이뤄진 배경 등을 추출하고자 할 때 각 각 수직선 에지 필터 커널이나 블러blur 필터 커널을 사용한다. 이렇게 필터 커널을 사용해 원본 이미지에 컨볼루션을 취하면 필터의 특성에 맞게 강조된 이미지를 얻 을 수 있다.

2차원 이미지의 컨볼루션을 이용한 필터링 개념을 보여준다. '' 모 양의 형태를 가진 10×10픽셀 크기의 그레이스케일 이미지가 있다. 이 경우 각 픽 셀은 0부터 10까지의 크기를 갖는다고 정의했다. 이 이미지에서 수평 방향의 특성 을 추출하고자 할 때는 수평 성분 필터 커널을 사용한다. , 커널의 수평 성분에 는 0이 아닌 실수값을 할당하고 다른 성분은 0으로 하는 필터다. 이 경우 3×3 크기 의 필터 커널 F를 사용했고 Faj = 1, j = 1,2,3을 부여했다. 이때 나머지 성분은 Fij = 0, if i ≠ 2로 설정했다. 이때 필터의 높이와 넓이는 각각 3이다. 일반적으로 필터는 원본 이미지 크기보다 작은 nxn 정방행렬을 사용하지만 비정방행렬이어도 상관 은 없다.

가중치 행렬인 필터 F₁를 가지고 입력 데이터의 컨볼루션을 계산할 때 F₄의 각성 분값은 고정돼 있다. , 한 가지 필터를 가지고 전체 입력 데이터에 동일하게 적 용한다. 이를 가중치 공유shared weight라고 하는데 이를 통해 매개변수가 감소해 역 전파 계산 시 문제의 복잡도가 상당한 크기로 줄어든다.

필터 커널을 이용해 컨볼루션 계산이 완료되면 각 픽셀에 있는 데이터를 활성화 함수에 적용해 좀 더 판별력 있게 만든다. 활성화 함수의 적용 여부와 어떠한 활성 화 함수를 사용할지는 사용자의 판단에 따른다. 최근에 이미지 분석 분야에서 가 장 많이 사용되는 활성화 함수는 ReLU. 발표된 연구에 의하면 ReLU는 입력 데 이터를 적절히 활성화하고 1차 미분이 상수값이기 때문에 학습 속도가 매우 빠르 다는 장점이 있다.

컨볼루션이 완료된 데이터를 활성화 함수에 통과시키고 나면 필터링 과정이 완료 된다. 필터링 과정은 입력 데이터 이미지의 특성을 추출하는 것이 목적이기 때문 에 처리해야 할 데이터 양의 관점에서는 여전히 원본 데이터에서 크게 줄어들지 않는다. 예를 들면, 앞에서 설명한 8×8 크기의 이미지를 분석하는 데도 여전히 3,840개의 변수를 풀어야 한다.

이 문제를 해결하기 위해 풀링pooling 또는 서브-샘플링sub-sampling이라는 과정을 적 용한다. 풀링은 컨볼루션으로 입력 데이터의 특성을 추출하고 나면 이웃하고 있는 데이터 간 대비율contrast을 높이고 데이터 수를 줄이는 역할을 한다.

풀링을 하기 위해서는 먼저 풀링 커널의 크기와 이동 보폭을 정한다. 만약 풀링 커 널의 크기를 nxn, 보폭 크기를 m이라고 한다면 nxn 크기 안에 들어오는 입력 데 이터 중 하나만을 대푯값으로 정한다. 이를 보폭 m만큼 이동하면서 반복 수행한 다. 예를 들면, 풀링 크기를 2×2로 하고 2단계씩 이동하면서 풀링하게 되면 앞 단 계에서 필터링된 특성지도를 정확히 1/2로 압축한 결과가 된다.

풀링 방법에는 최대 풀링max pooling, 평균 풀링mean pooling 그리고 확률적 풀링stochastic pooling이 있다. 최대 풀링은 nxn 크기 내에 있는 컨볼루션 데이터에서 가장 큰 것 을 대푯값으로 취하는 것인데, 직관적이고 계산의 편의성이 있지만 최대로 선택된 값이 노이즈일 때 오버피팅을 유발할 수 있다는 단점이 있다. 평균 풀링은 모든 값 의 평균을 취하는 방법으로 이것 역시 직관적이고 간편하나 낮게 활성화된 성분값 이 평균에 포함되면서 풀링 결과의 대비율을 떨어뜨릴 수 있다. 이러한 최대 풀링 과 평균 풀링의 단점을 극복하고자 제안된 것이 확률적 풀링이다.

확률적 풀링은 풀링 커널 안에 있는 필터링된 데이터를 임의의 확률로 한 개를 선 정하는 것이다. 확률적 풀링의 실행 방법은 매우 단순하지만 풀링 크기 내에 있는 모든 값을 고려할 수 있다는 장점이 있다. 그리고 풀링 범위 내에 동일한 값이 여 러게 있다면 확률적으로 선택될 가능성이 높아 풀링의 대표값으로 정하는 데 타 당하다 볼 수 있다.

확률적 풀링에 적용된 이러한 과정은 최대 풀링에서 발생하는 오버피팅의 문제를 해결해줌으로써 규제화에 큰 도움이 된다. 사실 규제화에 장점이 있는 것이 확률 적 풀링을 사용하는 가장 큰 이유다. 참고로 컨볼루션과 풀링 과정은 같은 입력 데 이터에 대해 동일한 명령 처리instruction를 반복적으로 수행하는 형태이기 때문에 데 이터 병렬처리가 가능한 부분이다. 최근에는 컨볼루션 및 풀링 과정은 GPU를 이 용한 데이터 병렬처리를 적용하기 때문에 계산 시간이 획기적으로 줄었다.

이와 같이 '필터링활성화 → 풀링' 과정을 거치면 픽셀 단위로 인지하고 있는 이미지를 에지나 실루엣silhouette 형태의 특성으로 이루어진 특성지도가 완성된다. 다음 단계는 이러한 부분적인 특성을 모아 좀더 확대된 형체의 이미지를 구성한 다. 얼굴 인식을 예로 들면 에지를 조합해서 눈이나 코와 같은 부분을 완성하는 단 계다. 이를 위해 이웃한 특성지도를 여러 개 조합해서 새로운 입력 데이터를 만든 다. 예를 들어, 1차 풀링된 특성지도가 6개가 있다고 하면 6개의 특성지도를 여러 가지 조합으로 새로운 입력 데이터 16개를 만들 수가 있다. 그림 11.4는 여러 가지 에지를 중첩해서 부분 이미지로 만드는 계수 행렬의 예를 보여준다.

이렇게 만들어진 데이터를 기반으로 앞에서 수행한 것과 마찬가지로 '필터링활 성화풀링' 과정을 동일하게 반복한다. 어느 정도 데이터의 특성이 추출되고 또 한 압축되고 나면 입력 데이터가 어느 그룹에 속하는지를 판별하는 분류 과정을 진행한다.

마지막 풀링이 끝나면 nxn 컨볼루션 필터 커널 크기의 m개의 데이터가 남게 된 다(또는 마지막 풀링 후 남은 데이터 크기에 맞추어 컨볼루션 필터 커널 크기를 정 할 수 있다). 이 데이터에 같은 크기의 최종 컨볼루션 커널로 계산하게 되면 데이 터가 1 × 1, 1차원 벡터 형태로 정렬되고 이 값들은 각 뉴런의 입력값으로 저장 된다. 이후에는 몇 개의 추가적인 다층 신경망을 통해 피드포워드 및 역전파 과정 을 거치면서 학습이 진행된다. 이 단계부터 모든 뉴런이 연결된 전체 연결 신경망fully-connected network 구조를 갖는다.

심층신뢰망

심층신뢰망Deep Belief Network은 입력층과 은닉층으로 구성돼 있는 제한된 볼츠만 머 신RBM; Restricted Boltzmann Machine을 이른바 빌딩블럭building block과 같이 계속 층층이 쌓 인 형태로 연결된 신경망이다. RBM이 여러 층으로 연결돼 있기 때문에 '심층' 신뢰 망이라고 한다.

심층신뢰망이 개발된 배경에는 피드포워드 신경망에서 신경망의 층 수가 늘어나 면서 발생되는 경사감소 소멸gradient descent vanishing 문제를 해결하는 방법이 필요했 다. 근사해가 정확해로 수렴하는 데 한계를 보여 주는 경사감소의 소멸은 결국 예 측값의 정확성이 근본적으로 개선되지 않는 문제를 갖게 된다.

심층신뢰망의 기본적인 개념은 RBM을 기반으로 일종의 비지도학습인 사전학습 pre-training을 통해 가중치를 어느 정도 정확해에 근접한 값으로 보정해 놓고, 마지 막 튜닝 과정을 통해 정확해에 가장 가까운 최종 가중치를 계산하는 방법이다. 이 러한 이유로 심층신뢰망은 레이블된 데이터세트가 충분하지 않은 경우에 적당한 방법이라고 할 수 있다. , 레이블이 없는 데이터를 비지도학습인 사전학습에 사 용해 정확해에 근접한 가중치를 얻는 데 활용한다.

 

심층신뢰망을 설명하기 전에 심층신뢰망의 핵심 구성요소인 RBM에 대해 알아보 자. RBM은 여러 가지 형태의 레이블된 데이터 또는 레이블되지 않은 데이터를 확 률적 방법으로 판별하는 생성모델generative model이다.

 

생성모델은 머신러닝에서 사용되는 확률적 분류 기법 중 하나인데 생성모델을 이 해하려면 생성모델의 반대 개념인 판별모델discriminative model을 먼저 이해하는 것이 도움이 된다.

앞에서 설명한 바와 같이 머신 러닝에서 어떤 입력값을 분류하는 일반적인 방법은 지도학습을 통해 의사결정에 필요한 판별식을 만드는 것이다. 판별모델은 이러한 판별식을 만들 때 입력값 x에 대해 그것이 속하는 그룹 y가 어떻게 결정되는지를 직접 찾아내는 확률적 방법을 말한다. 예를 들면, 판별모델은 어떤 동물 데이터의 특성 벡터 x를 가지고 강아지 (v = +1) 그룹에 속하는지 또는 고양이 (y = -1) 그룹 에 속하는지를 구별하는 판별식 p(y | x)를 찾는다. 대표적인 판별모델로는 로지스 틱 회귀 모델이나 서포트 벡터 머신SVM이 있다.

머신러닝의 확률적 분류 모델에서 또 다른 접근법은 먼저 강아지를 보고 강아지가 가지고 있는 특성들을 미리 분석한다. , 강아지(y = +1)에 대한 확률 분포 p(y =+1) 모델을 생성한다. 같은 방법으로 고양이의 특성을 사전에 분석하고 고양이의 특성을 나타내는 확률 분포 모델 ply = -1)을 생성한다. 이와 동시에 입력 데이터가 강아지 또는 고양이 특성 조건에 따라 확률 분포 모델 p(x | y = +1) p(x | y = -1) 을 각각 구한다. 이렇게 생성된 확률 모델을 베이즈 룰Bayes' Rule에 적용해 다음과 같 이 최종 판별식을 구한다.

 

규제화

RBM을 이용한 심층신경망은 신경망이 깊어질수록 가중치의 역전파가 약해지는 경사감소소멸 문제를 해결하기 위해 제안됐다. 결국 RBM을 빌딩블록으로 쌓아 만 든 심층신경망은 경사감소소멸 문제를 해결하고 가중치를 좀 더 정확히 계산하는 데 성공했다. 그러나 여전히 딥러닝에서 학습모델의 정확성을 떨어뜨리는 또 다른 문제가 있는데 바로 오버피팅이다.

오버피팅은 노이즈나 아웃라이어 데이터까지 모두 정상적인 것으로 인식하고 학 습하면서 생긴다. 따라서 학습 동안에 측정된 에러율은 낮지만 노이즈나 아웃라이 어까지 정상적으로 학습된 일종의 왜곡된 판별식은 본격적인 테스트나 검증을 할 때는 오히려 잘못된 판별을 할 확률이 높아진다. 오버피팅을 비롯한 여러 요인들은 머신러닝 알고리즘의 정확성을 떨어뜨리고 에 러를 증가시키는데, 이러한 에러를 줄이는 일련의 해결 방안들을 모두 규제화 regularization라고 한다. 규제화는 딥러닝을 포함한 머신러닝에 사용되기 전에 최적화 나 역문제inverse problem 등과 같은 다양한 분야에서 이미 사용돼 왔던 기술이다. 규제화를 위한 접근법으로 가장 일반적으로 사용되는 것이 목적함수에 구속조건을 적용하는 방법이다. 예를 들면, 최소제곱평균법을 이용한 목적함수 E(w)가 있 을 때 가중치에 대한 구속함수, R(w)를 추가로 고려해 노이즈나 아웃라이어의 영향을 줄이는 방법이다. , 구속함수 R(w)를 이용해 목적함수 E(w)를 규제화하 는 것이다. 이를 다음과 같이 표현할 수 있다. 딥러닝에서 사용되고 있는 규제화 중에서 또 다른 접근법으로 드롭아웃 알고리즘 이 있다. 드롭아웃의 기본적인 개념은 다음과 같다. 입력층과 은닉층에 있는 노드 를 임의로 선택해서 확률 기준으로 제거하고 나서 축소된 신경망을 가지고 학습 한다. 이때 제거되는 노드의 선택은 각 층마다 그리고 학습 데이터마다 독립적으 로 결정된다. 이렇게 임의로 노드가 제거된 상태에서 학습을 완료한 후 실제 테스 트를 할 때는 제거됐던 노드를 다시 복원하고 각 노드마다 가지고 있는 가중치에 확률 p를 곱해서 확률 p로 드롭아웃된 노드로 학습한 결과를 보상해준다.

참고로 드롭아웃 방법에서 노드를 제거하는 이유는 각 노드의 공동적응co-adaptation 문제를 해결하기 위해서다. 공동적응은 여러 분야에서 사용되고 있는 용어인데, 드롭아웃 알고리즘 관점에서는 노이즈에서 발생한 잘못된 특성이 모든 노드에 전 파되어 의미 있는 특성을 선별하는 데 부정적인 영향을 미치는 상태를 말한다.

 

딥러닝을 위한 오픈 프레임워크

오픈소스로 공개되는 딥러닝 프레임워크는 딥러닝의 발전에 매우 중요한 한 축을 담당하고 있다. 이미 검증된 딥러닝 프레임워크의 다양한 라이브러리와 사전 학습 된 알고리즘들은 아이디어에서 구현까지 소요되는 시간과 에너지를 상당 부분 줄 여준다. 또한 개발자들로 하여금 문제 해결에 필요한 핵심 알고리즘 개발에 집중 할 수 있게 하고 중복으로 사용되는 기능들을 다시 개발하는 소모적인 작업에서 해방시킨다. 프레임워크 관점에서도 개발자들로부터 받는 피드백은 프레임워크 자체가 발전하는 데 도움을 주고 이는 다시 많은 개발자들이 이용할 수 있게 하는 선순환 구조를 이룬다. 프레임워크는 그림 12.1과 같이 각종 하드웨어 및 소프트웨어 플랫폼 위에 설치 되며, 응용 프로그램을 만들기 위한 여러 가지 소프트웨어 모듈이나 라이브러리, APIApplication Programming Interface를 효율적으로 사용할 수 있게 묶어 놓은 패키지다. 건축에 비유하면 라이브러리는 벽돌이고 API는 몰타르라 할 수 있다. , 프레임 워크는 이러한 건축에 필요한 연장을 담고 있는 연장세트toolkit의 역할을 한다. 딥러닝 프레임워크는 크게 3가지 분야에 역점을 두고 있다.

첫 번째는 컨볼루션 신 경망이나 경사감소법, 그리고 RBM 등과 같은 딥러닝에 특화된 라이브러리를 사용 성과 성능 관점에서 더욱 개선하는 것이다. 이 분야는 프레임워크의 가장 기본적 인 기능이기도 하다.

두 번째는 최근 딥러닝의 사실상의 표준 하드웨어 플랫폼으로 자리잡고 있는 GPU 의 호환성 및 최적화다. GPU가 장착된 단일 서버 또는 노트북 PC에서 간단한 명 령어를 통해 성능을 대폭 향상시킬 수 있기 때문에 GPU 최적화 여부는 딥러닝 프 레임워크의 벤치마킹 항목으로 항상 포함되는 부분이다.

세 번째는 확장형 병렬컴퓨팅 환경 지원 부문이다. 최근 빅데이터 추세에 따라 처 리해야할 데이터가 급격히 늘어나고 있고 또한 의미 있는 수준 이상의 정확도를 가진 예측 모델이 요구되면서 단일 서버로는 이러한 딥러닝 문제를 감당하기 힘들 어졌다. 이처럼 대규모 딥러닝 문제를 다룰 수 있게 해 주는 것이 확장형 병렬컴퓨 팅 환경이다. 확장형scale-out이란 단일 서버의 사양을 높여 전체 성능을 높이는 것 이 아니라 보통의 성능을 가진 여러 대의 서버를 네트워크로 연결해서 전체 성능 을 높이는 것을 말한다. 프레임워크가 확장형 병렬컴퓨팅 환경을 지원하기 위해서 는 물리적으로 분리된 서버 간에 정보를 주고받게 해주는 MPIMessage Passing Interface 같은 API를 지원해야 한다. 현재 대부분의 슈퍼컴퓨터는 확장형 병렬컴퓨팅 구조 를 띠는데 딥러닝의 프레임워크가 슈퍼컴퓨터 기술 영역까지 확대되고 있다.

현재 10여 종의 딥러닝 프레임워크가 대학교, 스타트업, 개발자 커뮤니티를 중심 으로 사용되고 있다. 각 프레임워크는 저마다 전문화된 딥러닝 분야와 차별화된 기능을 가지고 있어서 딥러닝 응용 프로그램을 개발하고자 하는 사람들은 자신의 컴퓨팅 환경과 사용 목적, 응용분야에 따라 알맞은 프레임워크를 선택해야 한다. 예를 들면, 컴퓨팅 환경에서는 어떤 프로그래밍 언어를 사용할 것인지, 그리고 익 숙한 운영체계는 무엇인지, 하드웨어 플랫폼은 개인 PC인지 아니면 클라우드 서버 인지, GPU를 사용할 것인지 등을 판단한다. 사용 목적은 간단한 개념 증명을 위한 것인지 아니면 대학교 수업이나 프로젝트에 사용할 것인지 또는 실제 서비스에 적용할 목적인지 등의 기준을 먼저 정하는 것 이 좋다. 왜냐하면 개발하고자 하는 응용 프로그램의 필요조건이 계산 시간과 같 은 성능이나 다른 소프트웨어와의 연동 문제 또는 프로그래밍 언어의 학습 및 활 용 난이도 등 조건에 따라 적절한 프레임워크를 선정할 수 있기 때문이다. 응용 분야의 경우 해결하고자 하는 문제가 이미지 분석인지, 음성인식이나 자연어 처리인지 또는 강화학습인지를 정하고 이러한 분야에 특화된 라이브러리나 모듈 또는 사전학습된 모델을 효율적으로 지원해 줄 수 있는 프레임워크를 선택해야 할 것이다. 다음은 현재 가장 많이 사용되고 있는 대표적인 딥러닝 프레임워크들이다. 각 프 레임워크는 초기 개발 취지나 유지보수를 전담하는 조직의 특성에 따라 저마다 특 징과 장단점을 지니고 있다. 각 프레임워크가 지닌 장단점을 분석해서 내게 맞는 프레임워크를 선정하는 것이 딥러닝 연구의 시작이라 할 수 있다.

시아노

시아노 Theano는 파이썬 프로그래밍 언어를 위한 딥러닝 프레임워크로, 캐나다 몬 트리올 대학의 딥러닝 연구소인 MILA Montreal Institute for Learning Algorithm에서 개발했 다. 딥러닝의 대가인 몬트리올 대학의 요슈아 벤지오 교수가 바로 MILA의 책임자 다. 시아노는 오픈소스 라이선스인 BSD Berkeley Software Distribution로 제공되고 있는데, BSD는 사용자가 소스코드를 이용할 때 아파치 라이선스와 더불어 가장 제약사항 이 관대한 라이선스다.

시아노는 컨볼루션 신경망과 노이즈 제거 알고리즘인 오토 인코더Auto-Encoder, 리고 심층신경망에 최적화된 프레임워크다. 2008년에 첫 버전이 공개된 이후 딥러 닝 분야에서 가장 인기 있는 프레임워크로 알려져 있다. 이러한 이유로 기존 시아 노 프레임워크에 더욱 편리한 API를 보강해 시아노와 호환되는 갖가지 상위 버전 의 프레임워크가 개발됐는데, 그중 블록스Blocks, 케라스Keras, 라자냐Lasagne, 오픈딥 OpenDeep 그리고 파이런2Pylearn2가 대표적이다.

블록스는 연구개발 목적의 신속한 개념 증명과 프로토타입을 위해 MILA가 개발한 프레임워크다. 라자냐와 케라스는 캐글Kaggle이라는 딥러닝 대회에서 가장 많이 사 용되고 있는 프레임워크로 특히 케라스는 최근 구글이 공개한 텐서플로우TensorFlow 까지 지원하고 있다. 그러나 파이런2 2016 3월부로 추가적인 개발을 공식적으로 중단했다. 시아노는 오랫동안 딥러닝 연구를 주도해온 전문가들이 개발한 프레임워크여서 역전파 알고리즘과 같은 인공신경망을 구현하는 데 매우 편리하다. 또한 시아노는 콘볼루션 신경망 등과 같은 분야에 매우 유익한 학습자료tutorial도 제공하고 있어 처 음 딥러닝을 시작하려는 사람들에게 적당한 프레임워크라 할 수 있다. 시아노의 단점으로는 에러 메시지의 내용이 코드 수정에 그렇게 도움을 주지 못한 다는 것과 규모가 큰 모델을 컴파일할 때 시간이 오래 걸린다는 점이다. 그리고 사 전학습 모델 지원이 만족스럽지 못하고 프레임워크의 전체 구조가 다른 것에 비해 복잡하다는 것 등이 다소 아쉬운 부분이다.

카페

카페Caffe는 캘리포니아 버클리 대학교의 시각 및 학습 연구 센터BVLC; Berkeley Vision and Learning Center에서 개발했다. 카페는 C/C++와 파이썬을 지원하며 오픈소스로 누 구나 사용할 수 있다. 카페의 오픈소스 라이선스는 BSD. 산업 부문에서는 소셜 미디어 서비스 업체인 핀터레스트Pinterest가 카페를 사용하고 있으며, 구글의 이미 지 변환 프로젝트인 딥드림DeepDream 프로젝트에도 기본 프레임워크로 사용됐다. 최근 야후!에서는 빅데이터 병렬처리 오픈소스인 스파크를 카페와 연동해서 사용 하고 있다. 만약 컴퓨터 비전 분야에 딥러닝을 적용하고자 한다면 카페는 매우 만족스러운 프 레임워크 역할을 수행할 것이다. 카페에서는 이미지 분석에서 핵심기술로 자리 잡고 있는 컨볼루션 신경망을 포함한 다양한 라이브러리를 제공하고 있다. Caffe Model Zoo 웹사이트에서 필요한 라이브러리를 바로 내려받을 수 있다. 카페에서 제공되는 사전학습된 라이브러리를 이용하면 MNIST나 이미지넷에 있는 여러 레 이블된 이미지 데이터세트도 쉽게 사용할 수 있다. 일반적으로 대학교에서 개발된 순수연구 목적의 프레임워크는 빠르게 변화하고 있는 IT 환경에 능동적으로 대처하는데 한계를 보여주고 있다. 카페도 그런 의미 에서 예외는 아니다. 예를 들면, 최신 버전의 GPU 호환성 검증 및 최적화 지원이 신속하게 이뤄지지 못한다거나 확장형 분산 컴퓨팅 API 지원 등이 만족스럽지 못 한 것들은 카페를 사용할 때 아쉬운 부분이다.

토치

토치Torch는 뉴욕대학교에서 개발한 과학계산용 프레임워크다. 과학계산용 프레임 워크는 일반적으로 행렬과 벡터 연산에 최적화된 라이브러리와 각종 수학 및 과학 계산에 필요한 함수 라이브러리를 편리하게 사용할 수 있게 해주는 프레임워크를 말한다.

토치는 루아라는 스크립트 언어를 기반으로 개발됐고, C/C++로 개발된 수학 라이브러리를 사용해 다른 파이썬 기반 프레임워크보다 성능 측면에서 뛰어나다. 현재 토치의 버전은 Torch 7인데 토치의 버전은 홀수로 정의한다. 토치는 BSD 오 픈소스 라이선스로 공개돼 있다. 토치는 2002년에 최초 버전이 발표된 이후 10여년 이상 발전돼 온 프레임워크로 최근에는 페이스북 인공지능 연구소와 알파고를 개발한 구글의 딥마인드가 토치 를 사용하고 있다. 페이스북이 토치를 적극 지원하는 배경 중 하나는 페이스북이 최근에 인공지능 연 구소장으로 영입한 컨볼루션 신경망의 대가인 뉴욕대의 얀 르쿤 교수가 딥러닝 프 레임워크로 토치를 사용하고 있기 때문이다. 또한 구글의 딥마인드가 토치를 사용 하는 이유는 토치가 구글의 딥마인드의 전문 분야인 강화학습에 필요한 다양한 라 이브러리를 제공하고 있기 때문이다. 토치가 지닌 다른 장점 중 하나는 토치에 적 용된 텐서tensor 라이브러리가 파이썬 계열의 NumPy와 비슷해서 파이썬 커뮤니티 까지도 영역 확대가 가능하다는 점이다. 다른 딥러닝 프레임워크와 비교했을 때 토치가 지닌 가장 독특한 부분은 바로 루 아라는 스크립트 언어를 사용한다는 것이다. 루아의 사용은 양날의 칼처럼 장단 점을 동시에 가지고 있다. 장점으로는 언어 구조가 자바스크립트JavaScript와 비슷하 기때문에 매우 직관적이어서 배우기 쉽고 다른 사람이 작성한 코드를 빠르고 쉽게 이해할 수 있다. 또한 기본 엔진이 C/C++를 기반으로 개발됐기 때문에 다양한 플 랫폼에 호환되며 성능 또한 다른 스크립트 언어보다 우수하다. 그러나 루아는 C/C++, 자바, 파이썬만큼 사용자 그룹이 활성화되지 않아 생태계 를 조성하는 데 한계가 있다. 이것이 토치가 가지고 있는 유일한 단점이라 할 수 있다.

텐서플로우

텐서플로우TensorFlow는 구글의 브레인 프로젝트 팀이 디스트빌리프DistBelief라는 구 글의 초기 버전 딥러닝 프레임워크를 보강해서 2015년 말에 공개한 딥러닝 프레임 워크다. 텐서플로우는 아파치Apache 오픈소스 라이선스를 가지며, C/C++로 개발 된 엔진 위에 파이썬을 지원하는 구조로 돼 있다. 이러한 아키텍처는 카페나 시아 노와 비슷한 구조다. 텐서플로우는 딥러닝 신경망뿐만 아니라 강화학습의 각종 알 고리즘도 동시에 지원한다. 그러나 자바와 스칼라 Scala 프로그래밍 언어는 지원하 지 않는다. 여러 가지 자료를 분석해 보면 구글은 텐서플로우를 상업적으로 지원하지 않을 계 획이며 따라서 텐서플로우를 클라우드 서비스의 일종인 플랫폼 클라우드 서비스 PaaS; Platform as a Service로 확대되지 않을 가능성이 높다. 구글이 텐서플로우를 공개한 이유는 단지 연구개발 분야의 유용한 도구를 제공함으로써 핵심인력 채용이나 향 후 딥러닝 분야의 생태계에서 잠재적 영향력을 기대하는 정도로 해석된다.

텐서플로우는 핵심 라이브러리의 엔진을 C/C++를 기반으로 개발했기 때문에 행 렬계산과 같은 연산을 수행할 때 성능 관점에서 다른 프레임워크보다 우수하다. 특히 GPU에 최적화된 것을 장점으로 꼽을 수 있다. 다른 프레임워크와 비교해서 텐서플로우가 차별화할 수 있는 또 다른 장점은 분산 병렬컴퓨팅 환경을 지원한다 는 것이다. 분산 컴퓨팅 API 2016 3월에 발표한 버전 0.8부터 사용할 수 있는 데, 다른 프레임워크와 같이 내려받는 형태로 제공되는 것이 아니라 구글의 클라 우드 서비스인 구글 클라우드 머신러닝에서만 사용할 수 있다는 것이 흠이다. 텐 서플로우는 텐서보드 TensorBoard라는 시각화 도구를 제공하며, 사용자는 텐서보드를 통해 자신의 딥러닝 모델이 실제로 어떻게 작동하고 있는지 직관적으로 이해할 수 있다.

텐서플로우는 아직 사전학습 모델이 많지 않다는 단점이 있다. 분산 컴퓨팅 버전 이 구글 클라우드에서는 제공되고 있지만 내려받기가 가능한 배포 방식으로는 공 개되지 않은 것이 장점이자 단점이라 할 수 있다. 텐서플로우는 다른 딥러닝 프레 임워크보다는 뒤늦게 개발됐기 때문에 다양한 플랫폼에서의 최적화가 덜 돼있고 사전학습 모델이 많지 않다. 이러한 점들은 텐서플로우가 지속적으로 개선해야 할 부족한 부분이라 할 수 있다.

딥러닝포제이

딥러닝포제이 DeepLeaming) 2014년에 설립된 스타트업인 스카이마인드라는 회사 가 개발한 프레임워크다. DL4J라고 줄여 부르며 이름에서 짐작하듯이 자바를 지원 하는 프레임워크다. 개념 증명이나 프로토타입 개발에 주로 사용되는 파이썬과는 달리 자바는 기업에서 사용하는 상용 서비스의 사실상의 표준 개발 언어이기 때문 에 DL4J는 성능과 안정성, 호환성에 초점을 맞춰 개발됐다. DL4J는 아파치 라이선스로 공개돼 있어 누구나 내려받아 사용할 수 있다. 만약 전 문적인 유지보수나 문제해결, 사용자 교육 등 추가 서비스를 원한다면 스카이마인 드를 통해 유료로 제공받을 수 있다. DL4J는 현재 액센추어Accenture, 부즈 알렌Booz Allen, 쉐브로Chevron, IBM 등에 레퍼런스를 가지고 있다. 파이썬 기반의 딥러닝 프레임워크는 과학계산 라이브러리로 NumPy SciPy 등 을 사용하고 있는데, DL4J DN4J라는 자바 기반 과학계산 라이브러리를 직접 개 발해서 사용하고 있다. DN4J NumPy보다 약 2배 정도 빠르다. DL4J의 분산 컴 퓨팅 환경은 하둡과 스파크의 파일시스템과 연산 엔진을 연동해서 구현하고 있다.

딥러닝 알고리즘으로는 심층신뢰망과 이에 필요한 RBM을 지원하며, 컨볼루션 신 경망 모델도 지원한다. 여기에 추가적으로 경사감소소멸을 해결해 주는 순환신경 망과 순환신경망의 핵심 알고리즘인 장단기 기억법 알고리즘을 제공한다.

스카이마인드는 최근 프랑스의 다국적 통신사인 오렌지 Orange사에 DL4J를 기반으 로 하는 이상거래 탐지fraud detection 프로젝트를 성공적으로 마무리하면서 기업향 딥 러닝 프레임워크 벤더로 자리매김하고 있다.

 

책 제목 : 알고리즘으로 배우는 인공지능, 머신러닝, 딥러닝 입문

지은이 : 김의중