2020.03.16

딥러닝에 대한 10가지 질문

Rosaria Silipo, Kathrin Melcher, Adrian Nembach, Corey Weisinger | InfoWorld
데이터 과학 문제, 더 구체적으로는 인공 지능(AI) 영역에서 성공적으로 딥러닝(Deep Learning)을 사용하기 위한 전략을 설명하는 기사는 흔히 볼 수 있다. 그러나 딥러닝 자체와 딥러닝이 그렇게 강력한 이유, 그리고 실제 사용 환경에서 딥러닝이 취하는 다양한 형태에 대한 명확한 설명은 찾기가 쉽지 않다.

딥러닝, 신경망, 중요한 혁신, 가장 널리 사용되는 패러다임, 딥러닝이 효과적인 분야와 그렇지 않은 분야, 그리고 딥러닝의 간략한 역사에 대해 더 자세히 알기 위해 몇 가지 질문을 던지고 답을 구했다.
 
ⓒ GettyImagesBank

딥러닝이란 정확히 무엇인가?
딥러닝은 전통적인 신경망의 현대적 발전이다. 실제로 고전적인 피드 포워드(feed-forward), 완전 연결, 역전파(backpropagation) 학습, 다층 퍼셉트론(MLP)에 “더 깊은” 아키텍처가 추가된 것이다. 더 깊다는 것은 순환망, 합성곱망의 경우와 같이 숨겨진 층이 더 많고 몇 가지 새로운 신경 페러다임이 더 있다는 것을 의미한다.

딥러닝과 신경망의 차이는 무엇인가?
차이점은 없다. 딥러닝 네트워크가 곧 신경망이고, 단지 1990년대에는 학습이 불가능했던 수준의 더 복잡한 아키텍처가 추가됐을 뿐이다. 예를 들어 순환신경망(RNN)의 장단기 메모리(LSTM) 유닛은 1997년 호크라이터와 슈미트후버에 의해 고안됐지만 계산 시간이 길고 계산 리소스의 요건이 높았던 탓에 오랜 시간 도입되지 못했다. 두 개 이상의 숨겨진 층이 있는 다층 퍼셉트론 역시 나온 지 오래된 개념이고 그 혜택도 이미 명확히 알려졌다. 중대한 차이점은 현대의 연산 자원 덕분에 이제 이와 같은 개념을 실제로 구현할 수 있게 됐다는 것이다.

딥러닝을 좌우하는 요소는 결국 더 강력한 컴퓨팅 자원인가?
일반적으로 더 빠르고 더 강력한 연산 자원은 더 강력하고 유망한 신경 아키텍처의 구현과 실험을 가능하게 해준다. 신경망 학습에 며칠씩 소비하는 방식은 같은 신경망을 GPU 가속의 도움을 받아 몇 분만에 학습시키는 방법과 경쟁할 수 없다.

딥러닝의 인기를 촉발한 혁신적인 프로젝트는 무엇인가?
큰 도약이 일어난 시점은 딥러닝 기반의 알렉스넷(AlexNet) 네트워크가 이미지넷(ImageNet) 대회에서 전례 없는 격차로 우승한 2012년이다. 알렉스넷의 오류율은 15%였는데, 바로 다음 2위의 수치가 26%였다. 알렉스넷의 우승으로 딥러닝 네트워크가 급격히 부상했고 현재 정상급 모델의 오류율은 3% 미만이다. 

인간의 오류율이 5% 내외임을 감안하면 놀라운 수치다.

딥러닝이 그렇게 강력한 이유는 무엇인가?
한 마디로 요약하면 유연함이다. 한쪽 면에서 보면 신경망은 보편적 근사 함수다. 어렵게 들리는 용어지만, 충분히 복잡하게만 만든다는 전제 하에 신경망을 사용해서 거의 모든 것의 근사치를 구할 수 있음을 의미한다. 또 다른 면에서는 학습된 신경망 가중치를 사용해 비슷한 작업을 수행하는 다른 신경망의 가중치를 초기화할 수 있다. 이것을 전이 학습(Transfer Learning)이라고 하는데, 보통 사람들이 생각하는 이상으로 효과적이다. 처음에는 전혀 달라 보이는 작업에서도 아주 잘 작동한다.

가장 광범위하게 사용되는 신경망 패러다임은 무엇인가?
가장 성공적이며 광범위하게 도입된 네 가지 딥러닝 패러다임은 순환 신경망의 LSTM 유닛, 합성곱 신경망(CNN, Convolutional Neural Networks)의 합성곱 층, 인코더-디코더 구조, 그리고 생산적 적대 신경망(Generative Adversarial Networks, GAN)이다.

RNN은 텍스트(예를 들어 일련의 단어 또는 문자)와 같은 순차 데이터 또는 시계열 데이터 처리에 사용되는 신경망 군이다. 같은 네트워크의 복사본을 각 시간 단계에 적용하고 상태 벡터를 통해 다른 복사본을 연결하는 개념이다. 이렇게 하면 네트워크는 과거의 정보를 기억할 수 있다. RNN에서 많이 사용되는 유닛 네트워크는 게이트 순환 유닛(Gated Recurrent Units, GRU)과 LSTM이다.

CNN 층은 이미지와 같이 공간 의존성이 있는 데이터에 특히 강력하다. 모든 뉴런을 새로운 층에 연결하는 대신 일종의 필터 역할을 하는 슬라이딩 윈도우가 사용된다. 일부 합성곱이 가장자리나 모서리를 감지하고 다른 합성곱이 이미지 내의 고양이, 개, 표지판을 감지할 수 있다.

흔히 사용되는 또 다른 신경망 구조는 인코더-디코더 네트워크다. 예를 들어 병목 층이 있는 신경망이 학습을 통해 입력을 출력으로 재구성하는 오토인코더가 있다. 인코더-디코더 네트워크의 또 다른 응용은 RNN에서 인코더-디코더 구조가 사용되는 뉴럴 기계 번역이다. LSTM 기반 인코더는 소스 언어에서 콘텐츠의 밀집 표현을 추출하고, LSTM 기반 디코더는 타깃 언어로 출력 시퀀스를 생성한다.

물론 생산적 적대 신경망도 있다. 생산적 적대 신경망은 생성자와 감별자, 두 개의 딥러닝 네트워크로 구성된다. 두 네트워크 모두 개선을 위해 상호 경쟁하는 교차 단계로 학습된다. GAN은 이미지 텐서에 적용되어 애니메이션, 인체 형상을 만드는 데 사용됐으며 마치 반 고흐가 그린 듯한 작품을 만든 적도 있다.

딥러닝이 머신러닝 세계를 완전히 점령했는가?
적어도 아직은 아니다. 컴퓨터 비전과 같이 딥러닝을 더 이상 피할 수 없는 영역도 있지만, 표 형태의 데이터와 같이 딥러닝과 잘 맞지 않는 것으로 증명된 영역도 있다.

비즈니스 데이터를 저장하는 용도에서 여전히 주된 형식인 표 형태 데이터의 경우, 딥러닝 효과가 그렇게 나쁜 것은 아니다. 다만 성능 좋은 노트북에서 몇 분 이내에 학습이 가능한 랜덤 포리스트나 그래디언트 부스팅 트리를 사용해서 비슷한 정확도를 얻을 수 있는 마당에 굳이 값비싼 GPU 서버를 며칠동안 가동해 딥러닝 모델 하나를 학습시킬 이유가 없을 뿐이다.

딥러닝을 사용하려면 코딩 지식이 있어야 하는가?
꼭 그렇지는 않다. 대부분의 딥러닝 패러다임이 텐서플로우(TensorFlow)와 케라스(Keras)에 제공되고 둘 모두 파이썬 기술이 필요한 것은 사실이다. 그러나 오픈소스 KNIME 애널리틱스 플랫폼(KNIME Analytics Platform)은 백엔드에서 텐서플로우를 사용해서 케러스 및 딥러닝 라이브러리를 처리하는 GUI를 제공한다. 따라서 적절한 노드를 끌어서 다른 노드에 연결하는 방식으로 원하는 만큼 복잡하게 뉴럴 아키텍처를 구축할 수 있다.

<그림 1>에서 LSTM 기반 RNN을 학습시켜 프리 텍스트(free text)를 생성한 예를 볼 수 있다. 모델은 새로운 아웃도어 의류를 위해 산 이름과 유사한 가짜 이름을 생성한다. 맨 위(갈색 노드)에서 뉴럴 아키텍처를 구축한 다음 케라스의 네트워크 러너(Network Learner) 노드를 사용해서 학습시켰다. 학습된 네트워크는 적절히 수정되어 텐서플로우 형식으로 저장된다.
 
ⓒ KNIME

딥러닝 네트워크의 예는 어디서 찾을 수 있는가?
커뮤니티 KNIME 허브(KNIME Hub)에서 다양하게 찾을 수 있다. 예를 들어 LSTM 유닛을 사용하는 순환 신경망은 이 프리 텍스트 생성 예시(그림 1 참조) 또는 다른 시계열 예측 예시에서 볼 수 있다. 또한 “CNN 처음부터 만들기” 또는 “간단한 CNN 학습” 등에는 합성곱 신경망을 사용해서 이미지를 처리하는 여러 예시 워크플로우도 있다. 사기 탐지 작업을 위한 솔루션으로 사용되는 간단한 피드 포워드 완전 연결 다층 오토딩코딩 구조도 있다. 지금 이 시간에도 많은 예시가 커뮤니에 업로드되고 있을 것이다.

KNIME 애널리틱스 플랫폼을 사용할 경우 클라우드에 작업을 호스팅해야 하는가?
KNIME 애널리틱스 플랫폼은 오픈소스 애플리케이션이고 케라스, 텐서플로우 통합과 같은 통합 역시 마찬가지다. 따라서 퍼블릭 클라우드든 자신의 컴퓨터든 원하는 곳에 자유롭게 설치할 수 있다. 다만 확실한 한 가지는 시스템의 성능이 좋을수록 실행 속도도 빠르다는 것이다. KNIME 케라스 통합에 GPU 가속을 적용할 수도 있다. 이를 위해서는 CUDA가 설치된 GPU 장착 시스템, 케라스와 함께 GPU 설치를 위한 콘다(Conda) 환경, 마지막으로 KNIME 케라스 통합이 필요하다. editor@itworld.co.kr


2020.03.16

딥러닝에 대한 10가지 질문

Rosaria Silipo, Kathrin Melcher, Adrian Nembach, Corey Weisinger | InfoWorld
데이터 과학 문제, 더 구체적으로는 인공 지능(AI) 영역에서 성공적으로 딥러닝(Deep Learning)을 사용하기 위한 전략을 설명하는 기사는 흔히 볼 수 있다. 그러나 딥러닝 자체와 딥러닝이 그렇게 강력한 이유, 그리고 실제 사용 환경에서 딥러닝이 취하는 다양한 형태에 대한 명확한 설명은 찾기가 쉽지 않다.

딥러닝, 신경망, 중요한 혁신, 가장 널리 사용되는 패러다임, 딥러닝이 효과적인 분야와 그렇지 않은 분야, 그리고 딥러닝의 간략한 역사에 대해 더 자세히 알기 위해 몇 가지 질문을 던지고 답을 구했다.
 
ⓒ GettyImagesBank

딥러닝이란 정확히 무엇인가?
딥러닝은 전통적인 신경망의 현대적 발전이다. 실제로 고전적인 피드 포워드(feed-forward), 완전 연결, 역전파(backpropagation) 학습, 다층 퍼셉트론(MLP)에 “더 깊은” 아키텍처가 추가된 것이다. 더 깊다는 것은 순환망, 합성곱망의 경우와 같이 숨겨진 층이 더 많고 몇 가지 새로운 신경 페러다임이 더 있다는 것을 의미한다.

딥러닝과 신경망의 차이는 무엇인가?
차이점은 없다. 딥러닝 네트워크가 곧 신경망이고, 단지 1990년대에는 학습이 불가능했던 수준의 더 복잡한 아키텍처가 추가됐을 뿐이다. 예를 들어 순환신경망(RNN)의 장단기 메모리(LSTM) 유닛은 1997년 호크라이터와 슈미트후버에 의해 고안됐지만 계산 시간이 길고 계산 리소스의 요건이 높았던 탓에 오랜 시간 도입되지 못했다. 두 개 이상의 숨겨진 층이 있는 다층 퍼셉트론 역시 나온 지 오래된 개념이고 그 혜택도 이미 명확히 알려졌다. 중대한 차이점은 현대의 연산 자원 덕분에 이제 이와 같은 개념을 실제로 구현할 수 있게 됐다는 것이다.

딥러닝을 좌우하는 요소는 결국 더 강력한 컴퓨팅 자원인가?
일반적으로 더 빠르고 더 강력한 연산 자원은 더 강력하고 유망한 신경 아키텍처의 구현과 실험을 가능하게 해준다. 신경망 학습에 며칠씩 소비하는 방식은 같은 신경망을 GPU 가속의 도움을 받아 몇 분만에 학습시키는 방법과 경쟁할 수 없다.

딥러닝의 인기를 촉발한 혁신적인 프로젝트는 무엇인가?
큰 도약이 일어난 시점은 딥러닝 기반의 알렉스넷(AlexNet) 네트워크가 이미지넷(ImageNet) 대회에서 전례 없는 격차로 우승한 2012년이다. 알렉스넷의 오류율은 15%였는데, 바로 다음 2위의 수치가 26%였다. 알렉스넷의 우승으로 딥러닝 네트워크가 급격히 부상했고 현재 정상급 모델의 오류율은 3% 미만이다. 

인간의 오류율이 5% 내외임을 감안하면 놀라운 수치다.

딥러닝이 그렇게 강력한 이유는 무엇인가?
한 마디로 요약하면 유연함이다. 한쪽 면에서 보면 신경망은 보편적 근사 함수다. 어렵게 들리는 용어지만, 충분히 복잡하게만 만든다는 전제 하에 신경망을 사용해서 거의 모든 것의 근사치를 구할 수 있음을 의미한다. 또 다른 면에서는 학습된 신경망 가중치를 사용해 비슷한 작업을 수행하는 다른 신경망의 가중치를 초기화할 수 있다. 이것을 전이 학습(Transfer Learning)이라고 하는데, 보통 사람들이 생각하는 이상으로 효과적이다. 처음에는 전혀 달라 보이는 작업에서도 아주 잘 작동한다.

가장 광범위하게 사용되는 신경망 패러다임은 무엇인가?
가장 성공적이며 광범위하게 도입된 네 가지 딥러닝 패러다임은 순환 신경망의 LSTM 유닛, 합성곱 신경망(CNN, Convolutional Neural Networks)의 합성곱 층, 인코더-디코더 구조, 그리고 생산적 적대 신경망(Generative Adversarial Networks, GAN)이다.

RNN은 텍스트(예를 들어 일련의 단어 또는 문자)와 같은 순차 데이터 또는 시계열 데이터 처리에 사용되는 신경망 군이다. 같은 네트워크의 복사본을 각 시간 단계에 적용하고 상태 벡터를 통해 다른 복사본을 연결하는 개념이다. 이렇게 하면 네트워크는 과거의 정보를 기억할 수 있다. RNN에서 많이 사용되는 유닛 네트워크는 게이트 순환 유닛(Gated Recurrent Units, GRU)과 LSTM이다.

CNN 층은 이미지와 같이 공간 의존성이 있는 데이터에 특히 강력하다. 모든 뉴런을 새로운 층에 연결하는 대신 일종의 필터 역할을 하는 슬라이딩 윈도우가 사용된다. 일부 합성곱이 가장자리나 모서리를 감지하고 다른 합성곱이 이미지 내의 고양이, 개, 표지판을 감지할 수 있다.

흔히 사용되는 또 다른 신경망 구조는 인코더-디코더 네트워크다. 예를 들어 병목 층이 있는 신경망이 학습을 통해 입력을 출력으로 재구성하는 오토인코더가 있다. 인코더-디코더 네트워크의 또 다른 응용은 RNN에서 인코더-디코더 구조가 사용되는 뉴럴 기계 번역이다. LSTM 기반 인코더는 소스 언어에서 콘텐츠의 밀집 표현을 추출하고, LSTM 기반 디코더는 타깃 언어로 출력 시퀀스를 생성한다.

물론 생산적 적대 신경망도 있다. 생산적 적대 신경망은 생성자와 감별자, 두 개의 딥러닝 네트워크로 구성된다. 두 네트워크 모두 개선을 위해 상호 경쟁하는 교차 단계로 학습된다. GAN은 이미지 텐서에 적용되어 애니메이션, 인체 형상을 만드는 데 사용됐으며 마치 반 고흐가 그린 듯한 작품을 만든 적도 있다.

딥러닝이 머신러닝 세계를 완전히 점령했는가?
적어도 아직은 아니다. 컴퓨터 비전과 같이 딥러닝을 더 이상 피할 수 없는 영역도 있지만, 표 형태의 데이터와 같이 딥러닝과 잘 맞지 않는 것으로 증명된 영역도 있다.

비즈니스 데이터를 저장하는 용도에서 여전히 주된 형식인 표 형태 데이터의 경우, 딥러닝 효과가 그렇게 나쁜 것은 아니다. 다만 성능 좋은 노트북에서 몇 분 이내에 학습이 가능한 랜덤 포리스트나 그래디언트 부스팅 트리를 사용해서 비슷한 정확도를 얻을 수 있는 마당에 굳이 값비싼 GPU 서버를 며칠동안 가동해 딥러닝 모델 하나를 학습시킬 이유가 없을 뿐이다.

딥러닝을 사용하려면 코딩 지식이 있어야 하는가?
꼭 그렇지는 않다. 대부분의 딥러닝 패러다임이 텐서플로우(TensorFlow)와 케라스(Keras)에 제공되고 둘 모두 파이썬 기술이 필요한 것은 사실이다. 그러나 오픈소스 KNIME 애널리틱스 플랫폼(KNIME Analytics Platform)은 백엔드에서 텐서플로우를 사용해서 케러스 및 딥러닝 라이브러리를 처리하는 GUI를 제공한다. 따라서 적절한 노드를 끌어서 다른 노드에 연결하는 방식으로 원하는 만큼 복잡하게 뉴럴 아키텍처를 구축할 수 있다.

<그림 1>에서 LSTM 기반 RNN을 학습시켜 프리 텍스트(free text)를 생성한 예를 볼 수 있다. 모델은 새로운 아웃도어 의류를 위해 산 이름과 유사한 가짜 이름을 생성한다. 맨 위(갈색 노드)에서 뉴럴 아키텍처를 구축한 다음 케라스의 네트워크 러너(Network Learner) 노드를 사용해서 학습시켰다. 학습된 네트워크는 적절히 수정되어 텐서플로우 형식으로 저장된다.
 
ⓒ KNIME

딥러닝 네트워크의 예는 어디서 찾을 수 있는가?
커뮤니티 KNIME 허브(KNIME Hub)에서 다양하게 찾을 수 있다. 예를 들어 LSTM 유닛을 사용하는 순환 신경망은 이 프리 텍스트 생성 예시(그림 1 참조) 또는 다른 시계열 예측 예시에서 볼 수 있다. 또한 “CNN 처음부터 만들기” 또는 “간단한 CNN 학습” 등에는 합성곱 신경망을 사용해서 이미지를 처리하는 여러 예시 워크플로우도 있다. 사기 탐지 작업을 위한 솔루션으로 사용되는 간단한 피드 포워드 완전 연결 다층 오토딩코딩 구조도 있다. 지금 이 시간에도 많은 예시가 커뮤니에 업로드되고 있을 것이다.

KNIME 애널리틱스 플랫폼을 사용할 경우 클라우드에 작업을 호스팅해야 하는가?
KNIME 애널리틱스 플랫폼은 오픈소스 애플리케이션이고 케라스, 텐서플로우 통합과 같은 통합 역시 마찬가지다. 따라서 퍼블릭 클라우드든 자신의 컴퓨터든 원하는 곳에 자유롭게 설치할 수 있다. 다만 확실한 한 가지는 시스템의 성능이 좋을수록 실행 속도도 빠르다는 것이다. KNIME 케라스 통합에 GPU 가속을 적용할 수도 있다. 이를 위해서는 CUDA가 설치된 GPU 장착 시스템, 케라스와 함께 GPU 설치를 위한 콘다(Conda) 환경, 마지막으로 KNIME 케라스 통합이 필요하다. editor@itworld.co.kr


X