딥 러닝 인공지능의 핵심 요소, 훈련과 추론

by NVIDIA Korea

딥 러닝 인공지능의 핵심 요소, 훈련과 추론

안녕하세요, 엔비입니다! 오늘은 인공지능과 머신 러닝, 딥 러닝의 차이점을 알아본 지난 포스팅에 이어, 딥 러닝의 지능이 어떻게 구현되는지 좀 더 자세하게 살펴볼까 하는

누구나 초등학교 저학년일 때는 선생님의 지도에 따라 간단한 문장읽기와 한글쓰기부터 배우는 것을 시작하지만, 고학년이 될수록 누군가의 도움 없이도 책도 척척 읽어내는데요. 처음에는 백지 상태에서 시작하지만 배우면 배울수록 스스로 깨우치는 부분이 생겨서 나중에는 따로 별도의 지도 없이 책을 읽거나 글을 쓰는데 문제가 없게 됩니다.

이처럼 인간의 두뇌는 다양한 지식과 정보를 머리 속에 축적하는 ‘학습(또는 훈련)’과, 그 지식을 기반으로 새로운 정보에 대한 답을 스스로 도출해내는 ‘추론’으로 구분됩니다. 딥 러닝 또한 이러한 인간의 학습 과정을 그대로 옮겨와 그 나름의 ‘훈련’‘추론’을 거쳐 인공지능을 구현하게 되는 것이죠.

훈련 과정이 없으면 추론도 없습니다. 우리가 배운 지식을 토대로 사고하는 것처럼 훈련을 거치는 과정은 필수적입니다. 훈련을 제대로 완료하면, 우리가 고학년이 될수록 혼자 책을 읽을 수 있는 것처럼 따로 지도가 없어도 딥 러닝의 심층 신경망은 정답을 도출해 낼 수 있게 됩니다.

그리고 이렇게 훈련된 신경망은 애플리케이션 형태로 이미지, 음성, 혈액 질환 등을 인식해 내거나 혹은 누군가가 다음으로 구입할 것 같은 구두를 제안하는 등 다양한 영역에서 사용되고 있습니다. 훈련된 데이터를 활용해 구체적인 기능을 구현하는 ‘추론’ 작업을 해내는 것이죠.

심층 신경망의 훈련


딥 러닝에서 훈련은 우리가 학교를 다니는 이유와 같습니다.

우리가 지식을 배우기 위해 학교를 다니는 것처럼, 딥 러닝의 ‘훈련’도 동일한 맥락으로 진행됩니다. 그러나 신경망의 훈련 과정은 인간의 두뇌와는 조금 다른데요. 바로 물리적으로 일정 거리 내에 있으면 어떤 뉴런이든 서로 연결할 수 있는 우리의 뇌와 달리, 인공 신경망은 레이어 연결 및 데이터 전파 방향이 일정하다는 것이죠.

신경망을 훈련할 때, 훈련 데이터를 네트워크의 첫 번째 레이어에 넣으면, 수행 작업을 기준으로 입력의 정확도를 나타내는 가중치가 할당되며, 그 후 가중치를 모두 합산해 최종 출력이 결정됩니다.

이미지 인식 네트워크에 고양이의 이미지 데이터를 입력했다고 가정해볼게요. 첫 번째 레이어에서는 경계선을 찾습니다. 다음 단계는 직사각형, 원과 같은 좀더 세부적인 경계의 형태를 가려냅니다. 그리고 세 번째 레이어에서는 눈의 크기나 코의 모양과 같은 형태의 특징을 구분해냅니다. 각 레이어는 생성된 가중치의 총합을 바탕으로 최종 출력을 낼 때까지 다음 레이어로 이미지를 전달합니다.

여기에서 신경망 훈련이 사람의 사고와 다른 부분이 나옵니다. 신경망에서는 모든 훈련 이미지들의 가중치를 정하여 이미지가 고양이인지 아닌지에 대한 결론만 내립니다. 즉, 훈련 알고리즘에서 응답으로 얻는 정보는 ‘정답’ 이나 ‘오답’일 뿐입니다.

훈련에 필요한 대량의 연산

알고리즘에서 신경망에 오답을 알린 경우에는 정답이 무엇인지 알리지 않습니다. 네트워크의 레이어 전체에 오류가 다시 전파되고, 신경망은 다른 답을 추측해야 합니다. 매번 시도할 때마다 이전 검사와는 다른 특성(지금의 경우에는 고양이의 특성)을 고려하여 시도를 합니다. 그리고 레이어의 가중치의 높고 낮음이 또 정해지죠. 이러한 과정은 올바른 가중치를 정해서 실질적으로 정확한 답, 즉 고양이라는 답을 낼 수 있을 때까지 계속해서 반복됩니다.

훈련된 딥 러닝 네트워크에서 한정된 집합의 이미지에 대해 고양이를 정확하게 판별할 수 있도록 가르친 후, 고양이 이미지를 스스로 찾게 만들 수 있습니다.

자, 그럼 이제 훈련을 마친 신경망이 있다고 가정해 보아요. 신경망은 훈련 데이터를 바탕으로 학습을 끝마쳐서 가중치의 균형을 찾았습니다. 이제 응용될 일만 남았네요. 하지만 문제는, 연산 능력도 괴물처럼 많이 필요하다는 것입니다. 구글과 스탠포드 대학교에서 인공지능 연구에 오랫동안 몸 담은 뒤 현재는 바이두의 실리콘밸리 연구소에서 수석 과학자를 역임하고 있는 앤드류 응(Andrew Ng) 박사의 말에 따르면, 바이두의 중국어 음성 인식 모델 하나를 훈련하는데 무려 4 테라바이트의 훈련 데이터와 20 엑사플롭스의 연산이 필요하다고 합니다. 이는 다시 말해 훈련 주기 전체에 걸쳐서 200경 번의 수학 연산을 해야 하는 것입니다. 이 쯤에서 추론의 필요성이 대두되는 이유죠.

훈련을 마친 신경망, 추론을 시작하다

가중치를 제대로 갖춘 신경망은 기본적으로 굉장히 거대한 데이터베이스입니다. 이를 학습하게 만들기 위해 필요한 도구(사람의 예로 들자면 연필, 책, 교사 등에 해당)을 모두 갖추려면 굉장히 많은 작업이 필요하죠. 하지만 꼭 필요한 특정작업만 수행하게 한다면, 그 외 불필요한 부분은 가려낼 수 있지 않을까요?

훈련의 결과를 실제 세계에서 모두 활용하기 위해 필요한 것은 배운 것을 유지하면서 처음 접하는 데이터에 빠르게 적용할 수 있는 ‘추론’ 과정입니다. 추론은 소량의 데이터만으로도 무엇이 정답인지 정확하게 예측하는 것인데요. 이처럼 거대한 신경망에서 애플리케이션의 속도를 높이고 지연을 해소하기 위한 방법에는 크게 두 가지가 있습니다.

추론의 작동 방식

그 중 첫 번째 방식은 우선 신경망을 훈련한 뒤, 활성화되지 않는 부분을 우선 찾는 것입니다. 이러한 부분은 필요가 없으므로, 바로 ‘쳐내는’ 것이죠. 그리고 두 번째 방식에서는 신경망의 여러 레이어를 연산 단계 하나로 융합할 방법을 찾게 됩니다.

이는 마치 이미지를 압축하는 경우와 비슷하다고 할 수 있습니다. 디자이너들이 작업할 때는 수백만 픽셀에 달하는 거대한 고화질 이미지를 사용하지만, 온라인에 업로드 할 때는 jpeg로 변환하는 것처럼 말이죠. 변환된 이미지는 원본과 매우 비슷해서 인간의 눈으로 차이를 알기가 어려울 정도이지만 해상도가 훨씬 낮습니다. 추론에서도 마찬가지로, 유사한 정확도를 얻을 수 있지만 실행시간 단축 및 성능을 높이기 위해 최적화되고 압축된 간소화 버전을 사용한답니다.

이러한 추론 기능은 이미 우리 일상생활에서 쉽게 찾아볼 수 있습니다. 음성으로 작동하는 스마트폰의 보조 기능부터 구글의 음성 인식, 이미지 검색, 스팸 필터링까지 다양한 애플리케이션에서 추론을 사용하고 있죠. 바이두에서도 음성 인식, 페이스북의 이미지 인식, 아마존과 넷플릭스(Netflix)의 추천 엔진 등도 마찬가지입니다.

하지만 아무리 추론 기능을 통해 압축한다 하더라도, 딥 러닝에 필요한 연산 데이터는 여전히 방대합니다. 그렇기에 여러 가지 일을 한꺼번에 처리할 수 있는 병렬 연산을 지원하는 GPU 컴퓨팅이 딥 러닝 훈련 및 추론 모두에서 각광 받는 이유죠. 그 결과, GPU로 훈련한 시스템은 이미 인간 이상의 정확도로 패턴과 물체를 파악하는 등 빠르게 발전하고 있다고 하는데요.

좀더 구체적으로 설명 드리자면, 훈련이 완료된 네트워크는 현장에 배포되어 ‘추론’을 하며 ‘추론 대상’ 데이터를 분류합니다. 이 때에 훈련된 네트워크를 기반으로 수십억 번의 연산을 실행하여 알려진 패턴이나 물체를 식별할 수 있는 GPU(그리고 병렬 컴퓨팅 기능)가 활용되는 것이죠. ^^

위에서 말했던 이미지, 음성 인식 기능과 같이, 이미 많은 분들이 스마트폰 등과 같은 IT 기기를 통해 이러한 ‘훈련’과 ‘추론’을 통해 구현되는 다양한 기능들을 접하고 있습니다. 훈련은 점점 간소화되고, 추론을 통해 작동되는 애플리케이션이 우리 삶의 많은 부분에 적용되고 있는 것이죠. 그렇기에 이러한 인공지능 기술이 그려갈 미래의 일상은 과연 어떤 모습일지, 앞으로가 더욱 기대되는지도 모릅니다.