[첨단 헬로티]
인공지능(AI) 기술 빠르게 확산되고 있는 이유…오픈소스와 개발환경 때문
표본조사에서 좋은 결과를 얻으려면 모집단 전체의 특성을 잘 나타낼 수 있는 우량 샘플을 취하고 그 샘플로부터 모집단을 잘 설명할 수 있는 모델을 만들어야 한다. 만약 치우친 샘플로 모델을 만들면 ‘장님 코끼리 만지기’처럼 엉뚱한 결과를 초래할 수도 있다. 통계와 많은 면에서 유사한 머신러닝의 경우도 학습 알고리즘뿐만 아니라 학습 데이터의 질에 따라 학습 결과가 좌우되므로 학습 데이터의 선택은 매우 중요하다.
학습 데이터에 과하게 특화돼 실제 적용 시 좋지 못한 결과가 나오는 것을 오버피팅(overfitting)이라고 부른다. 이것은 시험에서 똑같은 문제는 잘 푸는데 내용을 조금만 바꾸면 틀리는 것과 유사하며 좋은 결과를 얻으려면 시험공부를 할 때 다양한 유형의 문제를 풀어서 응용 능력을 키워야 한다.
사람의 학습과 마찬가지로 머신러닝에서도 소량의 학습 데이터만으로도 우수한 결과를 내려면 학습 데이터에 실제 다양한 환경이나 특성을 반영할 수 있도록 데이터를 변형시켜 늘리는 데이터 증강(data augmentation)기술이 중요하다. 특히 데이터 자체를 구하기가 어렵거나 데이터에 정답지를 달아주는 라벨링 작업이 매우 힘든 의료 데이터 같은 경우 이 증강기술은 반드시 필요하다.
이렇게 데이터 증강기술은 매우 중요한 분야임에도 불구하고 망의 구조 연구나 시스템 변수 최적화와 같은 타 분야의 연구에 비해 상대적으로 소홀한 경향이 있었다. 유명한 신경망 모델에 적용하는 데이터 증강기술도 큰 영상에서 일부 영역을 잘라내기, 좌우 또는 상하 반전시키기, 회전시키기, 크기를 약간씩 변경하기와 같은 기본적인 증강기술만을 적용해왔다.
물론 일부 업체들은 자신들의 응용 분야에만 특화된 증강기술을 적용하거나 기술을 공개하지 않는 경향이 있었다. 그러다가 지난 2018년 구글 연구팀은 자동증강(AutoAugment)기술을 발표해 주목을 받는다. 데이터를 무작정 늘린다고 반드시 좋은 결과가 나오는 것은 아니다. 비슷한 데이터만 늘리는 경우에 학습 시간만 길어질 수도 있다. 구글 팀은 기존의 문제점을 개선한 체계적인 증강기술 정책을 개발해 최고의 성능을 얻었지만 연산 시간이 긴 문제가 있다.
올 국제 머신러닝 학회(ICML)에서 버클리대 연구진은 구글의 자동증강기술보다 1,000분의1 수준의 연산만으로도 비슷한 성능을 낼 수 있는 획기적인 증강기술을 발표했다. 모든 경우의 수를 시도하는 것이 아니라 일정 간격마다 이전 시도에서의 나쁜 결과는 버리고 좋은 결과를 선택하는 진화 알고리즘과 특정 영역에만 한정되는 문제를 피하기 위한 무작위 탐색 방법의 장점을 효율적으로 결합해 놀라운 성능을 얻었고 연산 시간을 대폭 절감할 수 있게 됐다. 소스 코드까지 공개했기 때문에 이를 기반으로 내년에는 더 멋진 데이터 증강기술들이 나올 것으로 기대한다.
인공신경망의 군살 빼기
수많은 분야에서 인공지능(AI) 기술이 빠르게 확산되고 있다. 여기에는 여러 요인이 있겠지만 대표적인 두 가지만 꼽는다면 오픈소스와 개발환경이다. 사실상 전통으로 자리 잡은 오픈소스 정책으로 인해 응용목적에 부합되는 신경망의 소스코드를 쉽게 구할 수 있으며 텐서플로(TensorFlow)처럼 AI를 개발하기 위한 환경(framework·프레임워크) 역시 무료로 구할 수 있고 인터넷 검색만 하면 자세한 사용법 또한 쉽게 얻을 수 있다.
프레임워크를 사용하면 신경망이 어떻게 동작을 하는지 몰라도 간단한 함수 몇 개만을 불러 쓰거나 오픈소스를 기반으로 값을 바꿔가면서 망을 구현할 수도 있다. 하지만 AI가 좋은 결과를 내더라도 최적 여부를 판단하고 싶거나 고성능 그래픽처리장치(GPU) 환경에서 동작하던 AI를 휴대폰이나 사물인터넷(IoT) 기기와 같이 상대적으로 열악한 임베디드(embedded·내장형) 환경에 이식시키기를 원한다면 신경망에 대한 좀 더 깊은 이해가 필요하다.
AI의 기반이 되는 신경망은 여러 층으로 구성되며 각각의 층에는 뉴런이라고 불리는 인공세포의 배열이 있고 층과 층 사이는 뉴런 간의 연결선으로 구성된다. 이 연결선은 매우 중요하며 연결선에는 뉴런 간의 연결강도를 정하는 변수가 있는데 학습을 통해 이 강도를 조절한다. 학습 전에는 연결강도를 알 수 없기 때문에 보통은 0과 1 사이의 무작위 값으로 초기화한다. 학습 사이클을 반복하면서 이 값을 의도하는 방향으로 점진적으로 변화시키는데 이를 통해 데이터에 내재한 어떤 패턴을 찾아내게 된다. 하지만 경우에 따라 학습이 제대로 안 되는 경우도 있는데 이런 경우에는 망의 구조를 변경시켜야 한다.
층수가 많은 심층 신경망이 적은 망보다 학습이 잘 된다는 사실이 알려지면서 이른바 딥러닝이 대세가 됐으며 요즘에는 층수가 수천 개가 되는 신경망이 사용되기도 한다. 하지만 망이 깊어지면 연결선의 개수도 비례해 늘어나게 되고 결과적으로 연결강도를 결정해야 할 변수가 많아지는데 고성능 GPU를 사용할 수 없는 환경에서 AI를 적용하는데 장애요소가 된다.
심층 신경망이 좋은 결과를 내기는 하지만 실제 필요한 것보다 훨씬 많은 변수를 사용하는 경향이 있다는 사실이 여러 연구 결과를 통해서 밝혀졌으며 중요하지 않는 변수를 가진 연결선을 제거하는 가지치기(pruning)를 사용하면 신경망에 대한 군살 빼기가 가능해진다. 어떤 복권이 당첨될지 모르는 상황에서는 복권을 많이 구입하면 당첨 확률이 올라가듯이 깊은 망을 사용하면 최적의 결과를 내는 망을 포함할 확률이 올라가고, 최적의 결과가 나왔다면 이후는 군살 빼기 작업을 통해 망을 줄이면 된다. 가지치기를 하고 재학습 과정을 반복하면 원래의 10분의1 또는 100분의1만 사용해도 비슷한 성능을 낼 수 있다. 이렇게 변수의 수를 대폭 줄이면 연산능력이 열악한 임베디드 환경에서도 AI를 적용할 수 있게 된다.
라온피플㈜
Copyright ⓒ 첨단 & Hellot.net