딥러닝 예측 모델 종류 - dibleoning yecheug model jonglyu

인사이트

머신러닝·딥러닝 모델 개념과 학습 원리ㅣ데이터 분할, 교차 검증

2022년 07월 15일

머신러닝 딥러닝 개념 파헤치기 2편

지난 머신러닝 딥러닝 차이점 콘텐츠에 이어 오늘도 머신러닝 딥러닝과 관련된 글을 준비했습니다. 먼저 짧게 지난 1편을 복습해볼까요?

인간의 학습 능력과 추론 능력, 지각 능력 등을 컴퓨터 프로그램으로 실현한 기술을 인공지능(Artificial intelligence)이라고 하며 그 연구 분야 중 하나가 머신러닝입니다. 딥러닝은 인공신경망을 이용한 머신러닝의 한 종류로 머신러닝의 하위 개념으로 볼 수 있습니다. 즉, 인공지능과 머신러닝, 딥러닝의 포함관계는 “인공지능 > 머신러닝 > 딥러닝” 로 표현해볼 수 있어요.

머신러닝과 딥러닝 모두 데이터를 분류하는 데 사용하는 기술이지만 두 기술의 가장 큰 차이점은 바로 사람의 개입 여부입니다. 더 자세한 내용이 궁금하시면 지난 콘텐츠에서 확인하실 수 있습니다.

머신러닝과 딥러닝은 차이점도 있지만 같은 뿌리를 둔 방법론인만큼 공통점도 많은데요. 이번 아티클에서는 머신러닝과 딥러닝에서 중요한 개념인 ‘모델’에 대해서 설명드리고 모델이 학습되는 원리와 효율적인 학습을 위한 데이터 분할에 대한 내용도 함께 정리했습니다.

이번 시간 다룰 내용 미리보기 🏷

  1. 머신러닝과 딥러닝의 기본 개념, 모델(Model)
  2. 머신러닝·딥러닝 모델이 학습되는 원리
  3. 학습을 위한 데이터 분할 (학습 데이터, 시험 데이터)
  4. 인공지능·머신러닝·딥러닝의 미래

머신러닝·딥러닝의 기본 개념, 모델(Model)

머신러닝, 딥러닝을 공부하며 앞으로 ‘모델(Model)’이라는 용어를 많이 보게 되실 텐데요. 모델의 정의를 먼저 짚고 가도록 할게요.

머신러닝 모델에서 ‘모델’이란?

머신러닝 모델, 딥러닝 모델은 물론 1편에서 배웠던 logistic regression 모델, SVM 모델 등등 여러 가지 방법론의 구현체를 ‘모델’이라로 부릅니다. 머신러닝과 마찬가지로 딥러닝도 ‘모델’이 여러 가지가 있습니다. 2개 이상의 모델의 출력을 융합시키는 앙상블 모델도 있답니다. 머신러닝과 딥러닝을 앙상블 할 수도 있고요.

만약 여러분이 머신러닝 프로젝트를 진행했다면, 누군가 “어떤 모델을 활용했어?”라고 물어볼 수 있고 그러면 여러분은 “logistic regression 모델을 활용했어.” 또는 “Yolo 모델을 활용했어” 하고 답변할 수 있습니다. 쉽게 말하면, 모델이란 ‘프로그램’과 유사한 의미라고 볼 수 있어요.

그럼 먼저 어떤 머신러닝 모델, 딥러닝 모델이 우리 실생활에서 쓰이고 있는지 살펴보겠습니다.

자율주행 자동차에서 활용하는 딥러닝 모델 🚗

자동차가 자율주행을 하려면 어떤 기능이 필요할까요?

자동차에 라이다(LIDAR/LiDAR, light detection and ranging)도 달려있어야겠지만, 간단한 설명을 위해 오직 카메라를 이용하여 아주 기초적인 1단계 수준의 자율주행을 한다고 가정해봅시다.

실제로 2015-2018년 자동차의 자율주행의 시작은 ‘크루즈 모드’라는 이름으로 출발하는데요. 60km/h 이상에서 정속주행을 할 수 있는 기능입니다. ‘가속’과 ‘감속’ 기능만을 구현하는 상황이라고 가정한다면, 앞에 차가 가까이 있으면 ‘감속’을 해야겠고, 차가 멀리 있으면 ‘가속’을 하면 되겠죠.

도로 위 자동차를 인식하는 yolo 모델

실제 활용 사례를 보여드리기 위해서 딥러닝 사물 인식 모델로 언급한 Yolo 모델에 도로 사진을 넣어봤어요. 좌측이 도로 사진, 우측이 yolo 모델에 넣어본 도로 사진입니다.

사진 내에서 자동차와 버스를 인식하고 그것들이 어느 위치에 있는지 네모 박스를 통해서 표현한 것을 볼 수 있습니다. 차를 표현하는 주황색, 버스를 표현하는 초록색 박스의 크기만으로도 앞 차가 가까운지 멀리있는지 알 수 있어 보이죠? 물론 이렇게 단순한 모델로만 자율주행이 되진 않습니다. 실제로 자율주행 기능이 있는 자동차 브랜드마다 사용하는 모델이 다를 테고요. 만약 비슷한 모델을 활용하더라도 그리고 지금처럼 단순한 이미지처리 뿐만 아니라 앞서 설명한 것처럼 앞차와의 거리를 측정하는 LiDAR 등과 결합해서 두 개 이상의 조건이 모두 만족하는 경우에만 ‘가속’을 한다든지 하는 안전장치들도 마련할 것이고, 여러 모델이 앙상블 된 모델을 활용할 수도 있겠죠.

버스, 사람까지 똑똑하게 구분하여 자율주행에 활용 🚶

위 사진에서 만약 도로에 사람 서있다면, 자율주행중인 자동차는 바로 멈춰야겠죠? 딥러닝의 활용에 대한 이해를 위해서 비교적 최신 모델인 Yolo-v5 모델을 이용해 보았습니다. Yolo-v5의 유명한 샘플 사진을 같은 모델에 넣어보았어요.

yolo-v5 모델에 넣어본 도로 사진, 사람과 버스를 구분합니다.

위 결과 이미지처럼 사람이 어디에 있는지, 버스는 어디에 있는지 찾아낼 수 있습니다. 이 위치에 따라서 자동차가 브레이크를 밟아야 할지 말지를 결정할 수 있겠죠.

이렇게 모델에 데이터를 넣는 것을 모델에 인퍼런스(inference) 한 결과라고 표현합니다. 인퍼런스에 걸리는 시간이 자율주행을 위해서는 굉장히 중요하기 때문에 inference time도 관심 있게 봐주셔야 합니다. Yolo v5 같은 모델은 이상적으로 FPS(Frame per second)가 140 이상이 되는 아주 빠른 모델입니다. 1초에 30 frame만 나와도 어느 정도 실시간으로 쓸 수 있을 테니 참 놀랍죠?

딥러닝이 없던 과거에는 자율주행 기술도 없었나요?

예전에도 컴퓨터비전 기술(line detection, HOG; 움직임 감지 기술) 등의 전통적인 머신러닝 기술을 활용해서 자율주행 등에서 쓰려고 노력했습니다. 확실히 딥러닝 시대에 비해서 성능은 좋지 않았죠. 그러나 예전 기술이 지금 쓰이지 않는다는 보장은 없어요! 이 역시도 앙상블 해서 좋은 결과를 만들 수 있다면 여전히 쓰고 있을지도 모릅니다.

시간 또한 중요한데요, 앞서 말씀드렸던 것처럼 Yolo 모델의 경우는 ‘딥러닝’ 모델임에도 실시간 처리가 가능한 inference time을 자랑합니다.

지금까지 자율주행 자동차에 사용될 수 있는 딥러닝 모델에 대해 간단하게 살펴보았습니다.

머신러닝·딥러닝 모델이 학습되는 원리

머신러닝 모델과 딥러닝 모델이 학습되는 원리를 한 마디로 요약하자면, 데이터와 레이블을 통해서 모델의 파라미터(Parameter)가 학습된다고 표현할 수 있습니다.

위 Yolo 예시를 학습한다고 하면, 자동차 이미지와 자동차의 윤곽선 박스(Bounding box, bbox)의 정보가 필요하겠죠? 또 자동차인지 버스인지 사람인지 알려줄 수 있는 클래스(Class)도 레이블이 필요합니다.

회귀만 있는 모델도 있고, 분류만 있는 모델도 있겠지만, 오늘 배운 Yolo 모델은 “bbox”가 어느 픽셀에 위치하는 지 연속적인 (x, y)위치 값 등을 회귀를 통해서 맞춰야 하고, 동시에 그 박스 내의 영상(이미지)이 어떤 카테고리(Class)인지 분류 문제까지 풀어야 합니다. 즉 데이터(Image)과 레이블(bbox 좌표 및 Class) 정보가 필요합니다.

좀 더 간단하게 표현을 해볼까요? 딥러닝이든 머신러닝이든 가장 간단한 함수의 형태로 표현할 수 있습니다. “y = ax + b” 이렇게 말이죠. 그 중에서 우리가 알고 싶고 학습하고 싶은 a, b가 파라미터(Parameter)입니다. 여기에서 학습 시 넣어주는 x는 데이터, y는 레이블이라고 할 수 있겠죠.

데이터와 정답을 알고 있으니까 대입해서 풀 수 있습니다. 모델이 데이터를 보고 학습해서 a, b를 찾아낼 수 있는 것입니다. 미지수가 2개인 “방정식”을 풀려면 2개의 데이터가 있어야 풀 수 있죠? “y = ax + b” 를 풀고자 한다면 최소한 2개의 데이터가 필요한 것입니다.

사실 딥러닝은 몇 백만(millions)에서 몇 십억(billions)개의 파라미터를 가지고 있어서 조금 다른 방식으로 풀어가는데요. 이런 모델은 학습 데이터로 수백만개의 데이터를 이용해서 학습을 진행해야 한답니다.

그러면 그 많은 데이터로 모델을 어떻게 학습시키는지 같이 알아볼까요?

딥러닝 모델 학습 준비 (1) 데이터 분할 (Split)

보통 공부를 너무 많이 했을 때 머리에서 ‘쥐’가 난다는 표현을 하죠? 컴퓨터도 한 번에 너무 많은 데이터를 넣어버리면 Out of Memory 문제로 터져버립니다. 그래서 일정량의 데이터로 분할을 해주는 과정이 필요해요. 더불어 학습을 위한 데이터와 검증을 위한 데이터를 따로 두어서 중간중간 잘 학습하는 지 평가하기도 합니다.

데이터 분할 개념을 학창시절 예시에 빗대어 알아볼게요.

  • 학교에서 적절한 난이도의 시험 문제를 만들어야 하는 수학 선생님이 있습니다.
  • 선생님은 이번 시험을 위해서 총 200문제를 만들어 두었습니다.
  • 시험 1주일 전, 40문제는 숨겨두고, 160문제만 학생들에게 공부하라고 정답과 함께 제공해 주었습니다.
  • 모의고사 날까지 학생들은 160문제를 열심히 풀면서 시험공부를 합니다.
  • 모의고사 날, 비공개로 해두었던 40문제 중에서 20문제를 선택해서 “1반 학생들”에게 풀어보게 합니다.
  • 여전히 숨겨둔 20문제는 비공개로 남겨둡니다.
  • 모의고사를 본 학생들에게 정답을 나눠주고, 각자 채점한 모의고사 성적을 본 뒤, 바로 진짜 시험을 보게 됩니다.
  • 시험이 끝나고 시험 점수를 공개합니다.

머신러닝 학습할 때에는 실제로 위 예시처럼, 학습(Training) 데이터(160문항), 모의고사와 같은 검증(Validation) 데이터(20문항), 실제 시험(Test) 데이터 (20문항)으로 구분을 합니다. 코드에서도 보면 다음처럼 데이터셋을 분할하는 과정이 들어갑니다. 아래 예시 코드는 학습용 데이터와 시험용 데이터를 구분하는 것이죠.

# sklearn.model_selection.train_test_split X_train, X_test, y_train, y_test = train_test_split( ... X, y, test_size=0.20)
머신러닝 딥러닝 학습을 위한 데이터 분할

그러면 컴퓨터가 터지지 않게 공부시키려면 어떻게 해야 할까요?

160문제를 한번에 풀기는 많으니, 20문제씩 8번에 걸쳐서 풀어보는 전략을 세울 수 있습니다. 여러분도 시험 공부를 할 때 비슷한 방식으로 공부했을 거에요. 물론 40문제씩 4번에 걸쳐서 풀 수도 있습니다. 조금 공부하다보면, 문제의 정답이 외워지기 때문에 문제의 순서도 바꿔서도 풀어봐야 겠죠?

딥러닝 모델 학습 준비 (2) 학습 분량 정하기 (Batch)

머신러닝도 앞서 설명했던 방법처럼 주어진 160문제를 몇 개로 나눠서 풀어보고 정답을 맞추어 보면서 틀린 것들과 맞은 것들을 확인하면서 공부합니다. 이렇게 한번 풀 수 있는 문제의 수를 배치사이즈(Batch_size)*라고 하고, 문제를 풀어보고 답을 맞춰보면서 틀린 것을 학습하는 한 번의 과정을 ‘이터레이션(Iteration)’ 이라고 합니다. 여러 iteration 을 거치면서 모델을 학습시키는데요. 한 번에 몇 문제씩 풀지 정하는 것을 주로 ‘batch_size’라고 표현합니다.

* 원래 Batch는 ‘일괄’이라는 의미가 있고, 지금처럼 푸는 방식은 Mini-batch라고 표현합니다.

배치사이즈대로 주어진 데이터를 이용하여 학습을 진행하고, 주어진 160문제를 전체를 다 풀었다면 “1 Epoch(에폭) 학습했다”라고 표현합니다. 그리고 자체적으로 모의고사를 봅니다. 점수가 60점이 나왔다면 추가로 다시 공부해야겠죠? 머신러닝은 학습과 모의고사를 반복하면서 학습합니다. 다시 모델은 160문제를 다 풀어보면, 한번 더 학습하고 나면 2 epoch이 지났다고 표현합니다. epoch를 반복하면서 머신러닝, 딥러닝이 이 문제의 순서를 외울 수 있으니 데이터의 순서도 무작위로 섞어서(shuffle) 다시 학습한다는 것도 꼭 기억하세요!

같은 방식으로 20번을 학습하라고 계획(Epoch=20)을 설정해두면, 머신러닝 모델은 이렇게 160개의 문제를 총 20번 풀어보게 됩니다. 총 3,200문제를 풀어본 것이 되는 거죠. 이렇게 많이 학습한다면 모의고사에서 100점을 받을 수 있을까요? 시험을 보면 어떨까요?

대망의 시험날, 과연 이 모델은 몇 점을 받았을까요?

앞서 머신러닝 모델이 학습하는 원리를 학창 시절 시험, 모의고사 예시를 통해 확인해보았습니다. 정리해보면, 머신러닝 학습을 위해서는 이렇게 3개의 데이터로 분류하는 작업이 필요합니다.

  • 160문제 : 연습하기 위한 데이터 = Training Dataset
  • 20문항 학습 중간 성적을 확인하는 모의고사 = Validation Dataset
  • 시험 20문항 = Test Dataset

이제 어느 정도 이해가 되시나요? 그럼 질문을 드려볼게요. 머신러닝, 딥러닝 모델은 어떻게 학습될까요? 바로 데이터와 레이블을 통해서 모델의 파라미터(Parameter)가 학습됩니다.

데이터는 시험문제, 레이블은 정답지, 모델의 파라미터는 공부하는 학생의 머리(뇌)라고 생각하시면 됩니다.

시험을 보는 주체인 사람과 같이 ‘모델’이 학습이 되어야 하는 것이고. 이 모델이 학습된다는 것은 주어진 파라미터들이 최적화된다는 의미에요. 추가로 최적화는 주어진 문제를 잘 푼다는 개념으로 봐주세요. 간혹 너무 학습을 많이 하게 되면, 문제를 외워서 새로운 문제에 적용하지 못하는 과적합(over-fitting) 문제가 발생할 수도 있기 때문에 ‘최적화’되는 것이 중요해요.

최고 효율 모델을 만드는 교차 검증(Cross Validation)

딥러닝 모델을 더 좋게 만들려면 어떻게 해야 할까요? 최적의 모델을 찾아내는 방법을 한번 생각해봅시다.

문제를 하나 내볼게요. 시험 문제 순서를 바꾸는 것만으로 학생들 성적에 영향을 줄 수 있을까요? 이 질문에 교육학 전문가들은 “Yes”라고 말해요. 적절한 난이도로 문제를 배치한다면 학생들이 쉽게 성적을 올릴 수 있기 때문인데요. 최근에는 TV 광고에서도, 스타트업에서도 인공지능을 이용해 학생 수준에 맞는 적절한 문제를 찾아주는 서비스도 있으니 어느 정도 증명이 된 방법이라고 할 수 있어요.

이처럼 머신러닝도 효과적인 학습을 위해서 교차 검증 등 다양한 시도를 해볼 수 있습니다.

시험을 내는 선생님의 입장으로 다시 돌아가 봅시다. 먼저 1반에서 160문제를 주고 공부하게 하고, 20문제로 모의고사를 봤습니다. 학습과 검증을 위해서 사용한 데이터가 180문항이죠. 같은 방법으로 수학 선생님은 1반-10반까지 모두 테스트를 해볼 수 있습니다. 그런데 총 180문항을 줄 때, 학습하는 문제와 모의고사 문제를 다르게 줄 수 있겠죠. 공부하는 순서를 바꿔보는 것인데요.

머신러닝에서도 이렇게 학습하는 데이터와 검증하는 데이터를 무작위로 섞어서 학습을 여러번 시켜보기도 하는데, 이를 교차 검증이라고 합니다. 문제를 다르게 받아본 1반-10 반 학생들의 성적이 달라지는 것처럼, 실제 머신러닝 모델도 교차 검증 시 결과가 달라집니다.

머신러닝 교차 검증

일반화

교차 검증의 목적은 여러가지가 있겠지만, 크게 2가지만 소개해볼게요. 첫번째는 일반화에요. 1반에만 테스트해보고 시험문제를 내는 것과 1-10반에 테스트를 해보고 시험을 내보면 어떤 문제가 더 변별력이 있을까요? 당연히 10개 반의 테스트를 해본 것이 더 변별력 좋은 문제를 만들어 낼 수 있을 거에요.

최적의 파라미터 찾기

성적이 다른 것은 시험보는 각 반의 학생들 실력이 다른것도 있지 않나요? “맞아요”

그러면 이런 학생들의 원래 실력을 어떻게 정의할 수 있을까요?

머신러닝, 딥러닝 모델에서는 학생들의 원래 실력같이 모델의 초기값*이라는 것이 있습니다. 이것을 잘 설정하는 것이 중요한데요, 초기값이 다르다는 것은 학생들의 출발점, 공부하기 전 원래 성적이 다르다는 것을 의미합니다.

* 초기값을 똑같이 맞추고, 같은 학습방법을 적용하면 머신러닝 모델은 항상 일정한 값을 내보냅니다. 실험이라는 것은 재현성, 똑같이 만들어 낼 수 있는게 중요하기 때문에 실험 때에는 초기값을 항상 정해두고 실험한답니다. 참고하세요!

초기값에 따라서 성적이 달라질 수 있기 때문에, 여러가지 다른 초기값을 가지고 같은 데이터로 학습을 해보면, 어떤 초기값이 더 좋은 지 알 수 있겠죠? 최적의 초기값을 찾기 위해서는 여러 시도를 해봐야겠지만, 우리는 편의 상 10번의 테스트만 해볼 거에요. 진짜 좋은 초기값을 찾으려면 이런 시도를 무수히 많이 해봐야 할 것입니다. 실제로 딥러닝에서는 어떤 초기값이 좋은 지 연구를 통해서 밝혀진 것들도 있답니다.

“열 번(1-10반)의 테스트만을 통해서 최적의 값을 찾아내겠다.” 이런 방식을 “10-fold 교차검증”이라고 합니다. 180문제를 총 10개의 그룹으로 나눈 뒤, 그룹1, 그룹2, …, 그룹 10으로 이름을 붙여줄 수 있습니다. 첫번째 모델은 ‘그룹1’문항을 검증 데이터셋으로 쓸 거고, 두번 째 모델은 ‘그룹2’ 문항을 검증데이터 셋으로 쓰는 원리로 총 10개의 모델을 만들어볼거에요. 이렇게 모의고사를 10번을 치르고 나면, 가장 성적이 좋은 반을 알 수 있을 거에요.

교차 검증을 통해서 찾은 이런 초기값처럼 우리가 앞으로 공부하게될 딥러닝, 머신러닝 모델을 최적화 해야하는 많은 지표들이 있을텐데요. 이 지표를 이제 Hyper-parameter라고 부르겠습니다.

이런 Hyper-parameter들을 잘 선정하는 것이 머신러닝과 딥러닝 모델의 성능에 꽤 중요한 역할을 하고 교차검증을 통해 최적의 Hyper-parameter들을 찾을 수 있습니다.

1반부터 10반까지 총 10번의 학습을 위한 테스트 과정을 거치게 되는데요, 10-fold라고 말씀드렸는데 5개로도 나눠서 할 수도 있을까요? 물론입니다. 5번 하면 5-fold 교차검증이라고 합니다. 주로 5와 10을 많이 쓴다는 것정도 기억해주세요.

인공지능·머신러닝·딥러닝의
현재와 미래 🌍

인공지능의 현재와 한계에 대해 잘 소개한 영상이 있어 소개해 드립니다. “인공지능에는 지능이 없다”라는 제목의 영상인데요. 영상에 나오는 다양한 한계에도 불구하고 인공지능은 산업계를 뒤흔들어 놓고 있습니다.

구글, 페이스북, 아마존, 마이크로소프트 등의 기술 주도 회사들은 딥러닝 인프라에 막대한 자금을 투입했습니다. 한국에서도 네이버와 카카오, 삼성, LG 등도 거대 인공지능 모델을 위해 엄청난 인프라를 구축하고 있습니다.

검색엔진을 기반으로 한 구글, 네이버 등과 광고 기술 기반의 페이스북과 아마존 회사들은 “자동화 광고 시스템”이나 “검색 엔진”에 대한 경험이 있기 때문에 이미 머신러닝 시스템과 친숙했습니다. 그래서 머신러닝과 딥러닝의 간단한 개념 전환만으로 오래된 머신러닝 시스템에 딥러닝을 적용했습니다. 삼성의 최신 카메라 기술에도 많은 딥러닝 기술들이 반영되었습니다.

이렇게 기술을 주도하는 회사들이 딥러닝, 머신러닝을 쓰는 것은 어찌 보면 당연한 일입니다. 그렇다면 다른 산업군은 어떨까요?

제조업 분야의 인공지능

삼성이나 하이닉스 등의 제조공정을 다루는 회사를 예로 들어보면, 반도체를 생산할 때, 모니터링하는 것이 매우 중요합니다. 컴퓨터를 조립했던 분이라면 CPU의 Clock 수, 3.1GHz, 2.9GHz 이런 단어들을 들어보셨을 텐데요. 컴퓨터의 성능의 핵심인 이런 부품들도 원래 계획한 도면대로 만들지만 제품의 상태에 따라서 3.1이 되기도 하고, 2.9가 되기도 합니다. 그만큼 생산할 때도 일관성을 맞추는 것은 대단히 어려운 문제일 수 있다는 것입니다. 일관된 반도체를 생산하기 위해서 중간중간 측정한 데이터를 어떻게 사용할 것인지도 중요해지고 있습니다.

신약 개발 분야의 인공지능

제조업뿐만 아닙니다. 최근 카카오브레인에서도 신약 개발을 위한 팀을 새롭게 구성한 바 있는데요, 딥러닝은 신약 개발에서 큰 두각을 나타내기 시작했습니다. 딥러닝으로 신약 개발을 하는 회사가 상장되는가 하면, 여러 스타트업도 생겨나고 있습니다.

신약 개발은 여러 단계를 거쳐 이루어집니다. 임상실험 전 단계에서는 간접적으로 실험관 튜브와 무척추동물 속에서 또 척추동물에도, 여러 신약의 효과를 실험합니다. 일차 실험이 통과하면 다음으로 임상실험 단계로 넘어가서 지원자를 통해 직접적으로 치료를 실험합니다. 이렇게 동물과 인간 모두에 대해 실험에서 성공해야 신약이 승인되고, 드디어 식약처 등에서 판매에 대한 승인을 얻게 됩니다. 이 과정이 매우 복잡하고, 검증하기도 어렵기 때문에 때로는 몇십 년 된 약을 아직도 먹고 있습니다.

딥러닝을 이용한 단백질 합성 시물레이션 (출처 : 구글 딥마인드)

연구원은 신약 개발 과정의 각 단계를 직접 실험하기보다, 컴퓨터로 시물레이션을 통해서 최적화하는 모델을 구축하기 시작했습니다. 예를 들어 분자구조 딥러닝을 추정해서 신약의 잠재적 독성을 예측하는 문제, 분자 설계, 합성을 효율적으로 하는 방법 등에 대한 연구가 학회 등에서 많이 발표되고 있습니다. 알파고 이후에 알파폴드(AlphaFold)라고 해서 단백질들의 구성을 딥러닝으로 예측하는 모형들이 유명합니다. 많은 실험이 기반이 되고, 물리화학적 특징들을 딥러닝이 학습하면, 앞으로도 더 많은 데이터가 쌓일 것이고, 생물정보학(bioinformatics)과 화학적 딥러닝 모델 설계가 지속해서 발전하여 제약회사의 생태계도 크게 바뀔 수 있습니다.

법조계의 인공지능

인공지능(AI) 변호사의 변론과 인공지능 판사의 판결이 예상되는 가운데 이제, 인공지능은 법조인의 자격을 결정짓는 사법 시험에까지 관여하기 시작했습니다. 판례 분석과 법률 상담까지 AI가 가능한 세상이 오고 있는 것인데요. 인공지능 아나운서도 생겨나고 있는 시대이기 때문에 법률 분석만 제대로 된다면 인공지능 변호사가 생기는 것은 시간문제 아닐까요?

이 외에도 로봇공학, 금융, 모빌리티, 오픈마켓, 부동산, 농업에 까지 수많은 기업들이 생겨나고, 딥러닝은 막대한 영향력을 끼치고 있다.

딥러닝을 기반으로 한 다양한 산업 (출처 : 지능정보산업협회)

미래의 인공지능에 대한 전망

이밖에도 무수히 많은 사례들이 있겠지만, 위 사례만으로도 “딥러닝으로 모든 것을 할 수 있다.”라고 말해도 과언이 아닙니다. 인공지능으로 대체할 수 없는 직업과 관련된 글과 신문기사가 하루가 멀다하고 쏟아지고 있는 세상이죠. 사람이 할 수 있다면, 그리고 심지어 반복되는 일이라면 딥러닝과 머신러닝으로 대체할 수 있는 세상이 가까워지고 있는 것인데요. 딥러닝 시대로 빠르게 흘러가는 변화 속에서 어떻게 딥러닝, 머신러닝을 잘 활용할 수 있을지 미래를 준비하는 자세가 필요할 것 같습니다.

데이터 입문을 위한 A to Z
코드스테이츠 AI 부트캠프

지금까지 방대한 데이터를 분류하는 데 사용하는 기술인 머신러닝, 딥러닝 모델과 학습 원리에 대해 알아보았는데요. 인공지능, 데이터 전공자는 아니지만 관련 분야에 대해 스터디하고 관련 커리어로 나아가길 희망한다면 코드스테이츠 AI 부트캠프가 좋은 기회일 수 있어요. 실무 중심 커리큘럼과 기업 프로젝트, 커리어 코칭, 졸업생 커뮤니티 등 탄탄한 시스템으로 데이터에 대한 A to Z를 능동적으로 배울 수 있어요!

👨‍🚀 데이터 사이언스 커리어의 시작,
AI 부트캠프가 더 궁금하다면?

추천글

코드스테이츠 스토리

코드스테이츠 AI 부트캠프ㅣ기업 협업 프로젝트

2022년 11월 23일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 커리큘럼, 학습 시간표ㅣ수강생 일주일 미리보기

2022년 10월 19일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 사전설명회ㅣ수료생 LIVE Q&A 세션

2022년 09월 05일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프ㅣ기업 협업 프로젝트

2022년 11월 23일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 커리큘럼, 학습 시간표ㅣ수강생 일주일 미리보기

2022년 10월 19일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 사전설명회ㅣ수료생 LIVE Q&A 세션

2022년 09월 05일

인사이트

머신러닝·딥러닝 모델 개념과 학습 원리ㅣ데이터 분할, 교차 검증

2022년 07월 15일

머신러닝 딥러닝 개념 파헤치기 2편

지난 머신러닝 딥러닝 차이점 콘텐츠에 이어 오늘도 머신러닝 딥러닝과 관련된 글을 준비했습니다. 먼저 짧게 지난 1편을 복습해볼까요?

인간의 학습 능력과 추론 능력, 지각 능력 등을 컴퓨터 프로그램으로 실현한 기술을 인공지능(Artificial intelligence)이라고 하며 그 연구 분야 중 하나가 머신러닝입니다. 딥러닝은 인공신경망을 이용한 머신러닝의 한 종류로 머신러닝의 하위 개념으로 볼 수 있습니다. 즉, 인공지능과 머신러닝, 딥러닝의 포함관계는 “인공지능 > 머신러닝 > 딥러닝” 로 표현해볼 수 있어요.

머신러닝과 딥러닝 모두 데이터를 분류하는 데 사용하는 기술이지만 두 기술의 가장 큰 차이점은 바로 사람의 개입 여부입니다. 더 자세한 내용이 궁금하시면 지난 콘텐츠에서 확인하실 수 있습니다.

머신러닝과 딥러닝은 차이점도 있지만 같은 뿌리를 둔 방법론인만큼 공통점도 많은데요. 이번 아티클에서는 머신러닝과 딥러닝에서 중요한 개념인 ‘모델’에 대해서 설명드리고 모델이 학습되는 원리와 효율적인 학습을 위한 데이터 분할에 대한 내용도 함께 정리했습니다.

이번 시간 다룰 내용 미리보기 🏷

  1. 머신러닝과 딥러닝의 기본 개념, 모델(Model)
  2. 머신러닝·딥러닝 모델이 학습되는 원리
  3. 학습을 위한 데이터 분할 (학습 데이터, 시험 데이터)
  4. 인공지능·머신러닝·딥러닝의 미래

머신러닝·딥러닝의 기본 개념, 모델(Model)

머신러닝, 딥러닝을 공부하며 앞으로 ‘모델(Model)’이라는 용어를 많이 보게 되실 텐데요. 모델의 정의를 먼저 짚고 가도록 할게요.

머신러닝 모델에서 ‘모델’이란?

머신러닝 모델, 딥러닝 모델은 물론 1편에서 배웠던 logistic regression 모델, SVM 모델 등등 여러 가지 방법론의 구현체를 ‘모델’이라로 부릅니다. 머신러닝과 마찬가지로 딥러닝도 ‘모델’이 여러 가지가 있습니다. 2개 이상의 모델의 출력을 융합시키는 앙상블 모델도 있답니다. 머신러닝과 딥러닝을 앙상블 할 수도 있고요.

만약 여러분이 머신러닝 프로젝트를 진행했다면, 누군가 “어떤 모델을 활용했어?”라고 물어볼 수 있고 그러면 여러분은 “logistic regression 모델을 활용했어.” 또는 “Yolo 모델을 활용했어” 하고 답변할 수 있습니다. 쉽게 말하면, 모델이란 ‘프로그램’과 유사한 의미라고 볼 수 있어요.

그럼 먼저 어떤 머신러닝 모델, 딥러닝 모델이 우리 실생활에서 쓰이고 있는지 살펴보겠습니다.

자율주행 자동차에서 활용하는 딥러닝 모델 🚗

자동차가 자율주행을 하려면 어떤 기능이 필요할까요?

자동차에 라이다(LIDAR/LiDAR, light detection and ranging)도 달려있어야겠지만, 간단한 설명을 위해 오직 카메라를 이용하여 아주 기초적인 1단계 수준의 자율주행을 한다고 가정해봅시다.

실제로 2015-2018년 자동차의 자율주행의 시작은 ‘크루즈 모드’라는 이름으로 출발하는데요. 60km/h 이상에서 정속주행을 할 수 있는 기능입니다. ‘가속’과 ‘감속’ 기능만을 구현하는 상황이라고 가정한다면, 앞에 차가 가까이 있으면 ‘감속’을 해야겠고, 차가 멀리 있으면 ‘가속’을 하면 되겠죠.

도로 위 자동차를 인식하는 yolo 모델

실제 활용 사례를 보여드리기 위해서 딥러닝 사물 인식 모델로 언급한 Yolo 모델에 도로 사진을 넣어봤어요. 좌측이 도로 사진, 우측이 yolo 모델에 넣어본 도로 사진입니다.

사진 내에서 자동차와 버스를 인식하고 그것들이 어느 위치에 있는지 네모 박스를 통해서 표현한 것을 볼 수 있습니다. 차를 표현하는 주황색, 버스를 표현하는 초록색 박스의 크기만으로도 앞 차가 가까운지 멀리있는지 알 수 있어 보이죠? 물론 이렇게 단순한 모델로만 자율주행이 되진 않습니다. 실제로 자율주행 기능이 있는 자동차 브랜드마다 사용하는 모델이 다를 테고요. 만약 비슷한 모델을 활용하더라도 그리고 지금처럼 단순한 이미지처리 뿐만 아니라 앞서 설명한 것처럼 앞차와의 거리를 측정하는 LiDAR 등과 결합해서 두 개 이상의 조건이 모두 만족하는 경우에만 ‘가속’을 한다든지 하는 안전장치들도 마련할 것이고, 여러 모델이 앙상블 된 모델을 활용할 수도 있겠죠.

버스, 사람까지 똑똑하게 구분하여 자율주행에 활용 🚶

위 사진에서 만약 도로에 사람 서있다면, 자율주행중인 자동차는 바로 멈춰야겠죠? 딥러닝의 활용에 대한 이해를 위해서 비교적 최신 모델인 Yolo-v5 모델을 이용해 보았습니다. Yolo-v5의 유명한 샘플 사진을 같은 모델에 넣어보았어요.

yolo-v5 모델에 넣어본 도로 사진, 사람과 버스를 구분합니다.

위 결과 이미지처럼 사람이 어디에 있는지, 버스는 어디에 있는지 찾아낼 수 있습니다. 이 위치에 따라서 자동차가 브레이크를 밟아야 할지 말지를 결정할 수 있겠죠.

이렇게 모델에 데이터를 넣는 것을 모델에 인퍼런스(inference) 한 결과라고 표현합니다. 인퍼런스에 걸리는 시간이 자율주행을 위해서는 굉장히 중요하기 때문에 inference time도 관심 있게 봐주셔야 합니다. Yolo v5 같은 모델은 이상적으로 FPS(Frame per second)가 140 이상이 되는 아주 빠른 모델입니다. 1초에 30 frame만 나와도 어느 정도 실시간으로 쓸 수 있을 테니 참 놀랍죠?

딥러닝이 없던 과거에는 자율주행 기술도 없었나요?

예전에도 컴퓨터비전 기술(line detection, HOG; 움직임 감지 기술) 등의 전통적인 머신러닝 기술을 활용해서 자율주행 등에서 쓰려고 노력했습니다. 확실히 딥러닝 시대에 비해서 성능은 좋지 않았죠. 그러나 예전 기술이 지금 쓰이지 않는다는 보장은 없어요! 이 역시도 앙상블 해서 좋은 결과를 만들 수 있다면 여전히 쓰고 있을지도 모릅니다.

시간 또한 중요한데요, 앞서 말씀드렸던 것처럼 Yolo 모델의 경우는 ‘딥러닝’ 모델임에도 실시간 처리가 가능한 inference time을 자랑합니다.

지금까지 자율주행 자동차에 사용될 수 있는 딥러닝 모델에 대해 간단하게 살펴보았습니다.

머신러닝·딥러닝 모델이 학습되는 원리

머신러닝 모델과 딥러닝 모델이 학습되는 원리를 한 마디로 요약하자면, 데이터와 레이블을 통해서 모델의 파라미터(Parameter)가 학습된다고 표현할 수 있습니다.

위 Yolo 예시를 학습한다고 하면, 자동차 이미지와 자동차의 윤곽선 박스(Bounding box, bbox)의 정보가 필요하겠죠? 또 자동차인지 버스인지 사람인지 알려줄 수 있는 클래스(Class)도 레이블이 필요합니다.

회귀만 있는 모델도 있고, 분류만 있는 모델도 있겠지만, 오늘 배운 Yolo 모델은 “bbox”가 어느 픽셀에 위치하는 지 연속적인 (x, y)위치 값 등을 회귀를 통해서 맞춰야 하고, 동시에 그 박스 내의 영상(이미지)이 어떤 카테고리(Class)인지 분류 문제까지 풀어야 합니다. 즉 데이터(Image)과 레이블(bbox 좌표 및 Class) 정보가 필요합니다.

좀 더 간단하게 표현을 해볼까요? 딥러닝이든 머신러닝이든 가장 간단한 함수의 형태로 표현할 수 있습니다. “y = ax + b” 이렇게 말이죠. 그 중에서 우리가 알고 싶고 학습하고 싶은 a, b가 파라미터(Parameter)입니다. 여기에서 학습 시 넣어주는 x는 데이터, y는 레이블이라고 할 수 있겠죠.

데이터와 정답을 알고 있으니까 대입해서 풀 수 있습니다. 모델이 데이터를 보고 학습해서 a, b를 찾아낼 수 있는 것입니다. 미지수가 2개인 “방정식”을 풀려면 2개의 데이터가 있어야 풀 수 있죠? “y = ax + b” 를 풀고자 한다면 최소한 2개의 데이터가 필요한 것입니다.

사실 딥러닝은 몇 백만(millions)에서 몇 십억(billions)개의 파라미터를 가지고 있어서 조금 다른 방식으로 풀어가는데요. 이런 모델은 학습 데이터로 수백만개의 데이터를 이용해서 학습을 진행해야 한답니다.

그러면 그 많은 데이터로 모델을 어떻게 학습시키는지 같이 알아볼까요?

딥러닝 모델 학습 준비 (1) 데이터 분할 (Split)

보통 공부를 너무 많이 했을 때 머리에서 ‘쥐’가 난다는 표현을 하죠? 컴퓨터도 한 번에 너무 많은 데이터를 넣어버리면 Out of Memory 문제로 터져버립니다. 그래서 일정량의 데이터로 분할을 해주는 과정이 필요해요. 더불어 학습을 위한 데이터와 검증을 위한 데이터를 따로 두어서 중간중간 잘 학습하는 지 평가하기도 합니다.

데이터 분할 개념을 학창시절 예시에 빗대어 알아볼게요.

  • 학교에서 적절한 난이도의 시험 문제를 만들어야 하는 수학 선생님이 있습니다.
  • 선생님은 이번 시험을 위해서 총 200문제를 만들어 두었습니다.
  • 시험 1주일 전, 40문제는 숨겨두고, 160문제만 학생들에게 공부하라고 정답과 함께 제공해 주었습니다.
  • 모의고사 날까지 학생들은 160문제를 열심히 풀면서 시험공부를 합니다.
  • 모의고사 날, 비공개로 해두었던 40문제 중에서 20문제를 선택해서 “1반 학생들”에게 풀어보게 합니다.
  • 여전히 숨겨둔 20문제는 비공개로 남겨둡니다.
  • 모의고사를 본 학생들에게 정답을 나눠주고, 각자 채점한 모의고사 성적을 본 뒤, 바로 진짜 시험을 보게 됩니다.
  • 시험이 끝나고 시험 점수를 공개합니다.

머신러닝 학습할 때에는 실제로 위 예시처럼, 학습(Training) 데이터(160문항), 모의고사와 같은 검증(Validation) 데이터(20문항), 실제 시험(Test) 데이터 (20문항)으로 구분을 합니다. 코드에서도 보면 다음처럼 데이터셋을 분할하는 과정이 들어갑니다. 아래 예시 코드는 학습용 데이터와 시험용 데이터를 구분하는 것이죠.

# sklearn.model_selection.train_test_split X_train, X_test, y_train, y_test = train_test_split( ... X, y, test_size=0.20)
머신러닝 딥러닝 학습을 위한 데이터 분할

그러면 컴퓨터가 터지지 않게 공부시키려면 어떻게 해야 할까요?

160문제를 한번에 풀기는 많으니, 20문제씩 8번에 걸쳐서 풀어보는 전략을 세울 수 있습니다. 여러분도 시험 공부를 할 때 비슷한 방식으로 공부했을 거에요. 물론 40문제씩 4번에 걸쳐서 풀 수도 있습니다. 조금 공부하다보면, 문제의 정답이 외워지기 때문에 문제의 순서도 바꿔서도 풀어봐야 겠죠?

딥러닝 모델 학습 준비 (2) 학습 분량 정하기 (Batch)

머신러닝도 앞서 설명했던 방법처럼 주어진 160문제를 몇 개로 나눠서 풀어보고 정답을 맞추어 보면서 틀린 것들과 맞은 것들을 확인하면서 공부합니다. 이렇게 한번 풀 수 있는 문제의 수를 배치사이즈(Batch_size)*라고 하고, 문제를 풀어보고 답을 맞춰보면서 틀린 것을 학습하는 한 번의 과정을 ‘이터레이션(Iteration)’ 이라고 합니다. 여러 iteration 을 거치면서 모델을 학습시키는데요. 한 번에 몇 문제씩 풀지 정하는 것을 주로 ‘batch_size’라고 표현합니다.

* 원래 Batch는 ‘일괄’이라는 의미가 있고, 지금처럼 푸는 방식은 Mini-batch라고 표현합니다.

배치사이즈대로 주어진 데이터를 이용하여 학습을 진행하고, 주어진 160문제를 전체를 다 풀었다면 “1 Epoch(에폭) 학습했다”라고 표현합니다. 그리고 자체적으로 모의고사를 봅니다. 점수가 60점이 나왔다면 추가로 다시 공부해야겠죠? 머신러닝은 학습과 모의고사를 반복하면서 학습합니다. 다시 모델은 160문제를 다 풀어보면, 한번 더 학습하고 나면 2 epoch이 지났다고 표현합니다. epoch를 반복하면서 머신러닝, 딥러닝이 이 문제의 순서를 외울 수 있으니 데이터의 순서도 무작위로 섞어서(shuffle) 다시 학습한다는 것도 꼭 기억하세요!

같은 방식으로 20번을 학습하라고 계획(Epoch=20)을 설정해두면, 머신러닝 모델은 이렇게 160개의 문제를 총 20번 풀어보게 됩니다. 총 3,200문제를 풀어본 것이 되는 거죠. 이렇게 많이 학습한다면 모의고사에서 100점을 받을 수 있을까요? 시험을 보면 어떨까요?

대망의 시험날, 과연 이 모델은 몇 점을 받았을까요?

앞서 머신러닝 모델이 학습하는 원리를 학창 시절 시험, 모의고사 예시를 통해 확인해보았습니다. 정리해보면, 머신러닝 학습을 위해서는 이렇게 3개의 데이터로 분류하는 작업이 필요합니다.

  • 160문제 : 연습하기 위한 데이터 = Training Dataset
  • 20문항 학습 중간 성적을 확인하는 모의고사 = Validation Dataset
  • 시험 20문항 = Test Dataset

이제 어느 정도 이해가 되시나요? 그럼 질문을 드려볼게요. 머신러닝, 딥러닝 모델은 어떻게 학습될까요? 바로 데이터와 레이블을 통해서 모델의 파라미터(Parameter)가 학습됩니다.

데이터는 시험문제, 레이블은 정답지, 모델의 파라미터는 공부하는 학생의 머리(뇌)라고 생각하시면 됩니다.

시험을 보는 주체인 사람과 같이 ‘모델’이 학습이 되어야 하는 것이고. 이 모델이 학습된다는 것은 주어진 파라미터들이 최적화된다는 의미에요. 추가로 최적화는 주어진 문제를 잘 푼다는 개념으로 봐주세요. 간혹 너무 학습을 많이 하게 되면, 문제를 외워서 새로운 문제에 적용하지 못하는 과적합(over-fitting) 문제가 발생할 수도 있기 때문에 ‘최적화’되는 것이 중요해요.

최고 효율 모델을 만드는 교차 검증(Cross Validation)

딥러닝 모델을 더 좋게 만들려면 어떻게 해야 할까요? 최적의 모델을 찾아내는 방법을 한번 생각해봅시다.

문제를 하나 내볼게요. 시험 문제 순서를 바꾸는 것만으로 학생들 성적에 영향을 줄 수 있을까요? 이 질문에 교육학 전문가들은 “Yes”라고 말해요. 적절한 난이도로 문제를 배치한다면 학생들이 쉽게 성적을 올릴 수 있기 때문인데요. 최근에는 TV 광고에서도, 스타트업에서도 인공지능을 이용해 학생 수준에 맞는 적절한 문제를 찾아주는 서비스도 있으니 어느 정도 증명이 된 방법이라고 할 수 있어요.

이처럼 머신러닝도 효과적인 학습을 위해서 교차 검증 등 다양한 시도를 해볼 수 있습니다.

시험을 내는 선생님의 입장으로 다시 돌아가 봅시다. 먼저 1반에서 160문제를 주고 공부하게 하고, 20문제로 모의고사를 봤습니다. 학습과 검증을 위해서 사용한 데이터가 180문항이죠. 같은 방법으로 수학 선생님은 1반-10반까지 모두 테스트를 해볼 수 있습니다. 그런데 총 180문항을 줄 때, 학습하는 문제와 모의고사 문제를 다르게 줄 수 있겠죠. 공부하는 순서를 바꿔보는 것인데요.

머신러닝에서도 이렇게 학습하는 데이터와 검증하는 데이터를 무작위로 섞어서 학습을 여러번 시켜보기도 하는데, 이를 교차 검증이라고 합니다. 문제를 다르게 받아본 1반-10 반 학생들의 성적이 달라지는 것처럼, 실제 머신러닝 모델도 교차 검증 시 결과가 달라집니다.

머신러닝 교차 검증

일반화

교차 검증의 목적은 여러가지가 있겠지만, 크게 2가지만 소개해볼게요. 첫번째는 일반화에요. 1반에만 테스트해보고 시험문제를 내는 것과 1-10반에 테스트를 해보고 시험을 내보면 어떤 문제가 더 변별력이 있을까요? 당연히 10개 반의 테스트를 해본 것이 더 변별력 좋은 문제를 만들어 낼 수 있을 거에요.

최적의 파라미터 찾기

성적이 다른 것은 시험보는 각 반의 학생들 실력이 다른것도 있지 않나요? “맞아요”

그러면 이런 학생들의 원래 실력을 어떻게 정의할 수 있을까요?

머신러닝, 딥러닝 모델에서는 학생들의 원래 실력같이 모델의 초기값*이라는 것이 있습니다. 이것을 잘 설정하는 것이 중요한데요, 초기값이 다르다는 것은 학생들의 출발점, 공부하기 전 원래 성적이 다르다는 것을 의미합니다.

* 초기값을 똑같이 맞추고, 같은 학습방법을 적용하면 머신러닝 모델은 항상 일정한 값을 내보냅니다. 실험이라는 것은 재현성, 똑같이 만들어 낼 수 있는게 중요하기 때문에 실험 때에는 초기값을 항상 정해두고 실험한답니다. 참고하세요!

초기값에 따라서 성적이 달라질 수 있기 때문에, 여러가지 다른 초기값을 가지고 같은 데이터로 학습을 해보면, 어떤 초기값이 더 좋은 지 알 수 있겠죠? 최적의 초기값을 찾기 위해서는 여러 시도를 해봐야겠지만, 우리는 편의 상 10번의 테스트만 해볼 거에요. 진짜 좋은 초기값을 찾으려면 이런 시도를 무수히 많이 해봐야 할 것입니다. 실제로 딥러닝에서는 어떤 초기값이 좋은 지 연구를 통해서 밝혀진 것들도 있답니다.

“열 번(1-10반)의 테스트만을 통해서 최적의 값을 찾아내겠다.” 이런 방식을 “10-fold 교차검증”이라고 합니다. 180문제를 총 10개의 그룹으로 나눈 뒤, 그룹1, 그룹2, …, 그룹 10으로 이름을 붙여줄 수 있습니다. 첫번째 모델은 ‘그룹1’문항을 검증 데이터셋으로 쓸 거고, 두번 째 모델은 ‘그룹2’ 문항을 검증데이터 셋으로 쓰는 원리로 총 10개의 모델을 만들어볼거에요. 이렇게 모의고사를 10번을 치르고 나면, 가장 성적이 좋은 반을 알 수 있을 거에요.

교차 검증을 통해서 찾은 이런 초기값처럼 우리가 앞으로 공부하게될 딥러닝, 머신러닝 모델을 최적화 해야하는 많은 지표들이 있을텐데요. 이 지표를 이제 Hyper-parameter라고 부르겠습니다.

이런 Hyper-parameter들을 잘 선정하는 것이 머신러닝과 딥러닝 모델의 성능에 꽤 중요한 역할을 하고 교차검증을 통해 최적의 Hyper-parameter들을 찾을 수 있습니다.

1반부터 10반까지 총 10번의 학습을 위한 테스트 과정을 거치게 되는데요, 10-fold라고 말씀드렸는데 5개로도 나눠서 할 수도 있을까요? 물론입니다. 5번 하면 5-fold 교차검증이라고 합니다. 주로 5와 10을 많이 쓴다는 것정도 기억해주세요.

인공지능·머신러닝·딥러닝의
현재와 미래 🌍

인공지능의 현재와 한계에 대해 잘 소개한 영상이 있어 소개해 드립니다. “인공지능에는 지능이 없다”라는 제목의 영상인데요. 영상에 나오는 다양한 한계에도 불구하고 인공지능은 산업계를 뒤흔들어 놓고 있습니다.

구글, 페이스북, 아마존, 마이크로소프트 등의 기술 주도 회사들은 딥러닝 인프라에 막대한 자금을 투입했습니다. 한국에서도 네이버와 카카오, 삼성, LG 등도 거대 인공지능 모델을 위해 엄청난 인프라를 구축하고 있습니다.

검색엔진을 기반으로 한 구글, 네이버 등과 광고 기술 기반의 페이스북과 아마존 회사들은 “자동화 광고 시스템”이나 “검색 엔진”에 대한 경험이 있기 때문에 이미 머신러닝 시스템과 친숙했습니다. 그래서 머신러닝과 딥러닝의 간단한 개념 전환만으로 오래된 머신러닝 시스템에 딥러닝을 적용했습니다. 삼성의 최신 카메라 기술에도 많은 딥러닝 기술들이 반영되었습니다.

이렇게 기술을 주도하는 회사들이 딥러닝, 머신러닝을 쓰는 것은 어찌 보면 당연한 일입니다. 그렇다면 다른 산업군은 어떨까요?

제조업 분야의 인공지능

삼성이나 하이닉스 등의 제조공정을 다루는 회사를 예로 들어보면, 반도체를 생산할 때, 모니터링하는 것이 매우 중요합니다. 컴퓨터를 조립했던 분이라면 CPU의 Clock 수, 3.1GHz, 2.9GHz 이런 단어들을 들어보셨을 텐데요. 컴퓨터의 성능의 핵심인 이런 부품들도 원래 계획한 도면대로 만들지만 제품의 상태에 따라서 3.1이 되기도 하고, 2.9가 되기도 합니다. 그만큼 생산할 때도 일관성을 맞추는 것은 대단히 어려운 문제일 수 있다는 것입니다. 일관된 반도체를 생산하기 위해서 중간중간 측정한 데이터를 어떻게 사용할 것인지도 중요해지고 있습니다.

신약 개발 분야의 인공지능

제조업뿐만 아닙니다. 최근 카카오브레인에서도 신약 개발을 위한 팀을 새롭게 구성한 바 있는데요, 딥러닝은 신약 개발에서 큰 두각을 나타내기 시작했습니다. 딥러닝으로 신약 개발을 하는 회사가 상장되는가 하면, 여러 스타트업도 생겨나고 있습니다.

신약 개발은 여러 단계를 거쳐 이루어집니다. 임상실험 전 단계에서는 간접적으로 실험관 튜브와 무척추동물 속에서 또 척추동물에도, 여러 신약의 효과를 실험합니다. 일차 실험이 통과하면 다음으로 임상실험 단계로 넘어가서 지원자를 통해 직접적으로 치료를 실험합니다. 이렇게 동물과 인간 모두에 대해 실험에서 성공해야 신약이 승인되고, 드디어 식약처 등에서 판매에 대한 승인을 얻게 됩니다. 이 과정이 매우 복잡하고, 검증하기도 어렵기 때문에 때로는 몇십 년 된 약을 아직도 먹고 있습니다.

딥러닝을 이용한 단백질 합성 시물레이션 (출처 : 구글 딥마인드)

연구원은 신약 개발 과정의 각 단계를 직접 실험하기보다, 컴퓨터로 시물레이션을 통해서 최적화하는 모델을 구축하기 시작했습니다. 예를 들어 분자구조 딥러닝을 추정해서 신약의 잠재적 독성을 예측하는 문제, 분자 설계, 합성을 효율적으로 하는 방법 등에 대한 연구가 학회 등에서 많이 발표되고 있습니다. 알파고 이후에 알파폴드(AlphaFold)라고 해서 단백질들의 구성을 딥러닝으로 예측하는 모형들이 유명합니다. 많은 실험이 기반이 되고, 물리화학적 특징들을 딥러닝이 학습하면, 앞으로도 더 많은 데이터가 쌓일 것이고, 생물정보학(bioinformatics)과 화학적 딥러닝 모델 설계가 지속해서 발전하여 제약회사의 생태계도 크게 바뀔 수 있습니다.

법조계의 인공지능

인공지능(AI) 변호사의 변론과 인공지능 판사의 판결이 예상되는 가운데 이제, 인공지능은 법조인의 자격을 결정짓는 사법 시험에까지 관여하기 시작했습니다. 판례 분석과 법률 상담까지 AI가 가능한 세상이 오고 있는 것인데요. 인공지능 아나운서도 생겨나고 있는 시대이기 때문에 법률 분석만 제대로 된다면 인공지능 변호사가 생기는 것은 시간문제 아닐까요?

이 외에도 로봇공학, 금융, 모빌리티, 오픈마켓, 부동산, 농업에 까지 수많은 기업들이 생겨나고, 딥러닝은 막대한 영향력을 끼치고 있다.

딥러닝을 기반으로 한 다양한 산업 (출처 : 지능정보산업협회)

미래의 인공지능에 대한 전망

이밖에도 무수히 많은 사례들이 있겠지만, 위 사례만으로도 “딥러닝으로 모든 것을 할 수 있다.”라고 말해도 과언이 아닙니다. 인공지능으로 대체할 수 없는 직업과 관련된 글과 신문기사가 하루가 멀다하고 쏟아지고 있는 세상이죠. 사람이 할 수 있다면, 그리고 심지어 반복되는 일이라면 딥러닝과 머신러닝으로 대체할 수 있는 세상이 가까워지고 있는 것인데요. 딥러닝 시대로 빠르게 흘러가는 변화 속에서 어떻게 딥러닝, 머신러닝을 잘 활용할 수 있을지 미래를 준비하는 자세가 필요할 것 같습니다.

데이터 입문을 위한 A to Z
코드스테이츠 AI 부트캠프

지금까지 방대한 데이터를 분류하는 데 사용하는 기술인 머신러닝, 딥러닝 모델과 학습 원리에 대해 알아보았는데요. 인공지능, 데이터 전공자는 아니지만 관련 분야에 대해 스터디하고 관련 커리어로 나아가길 희망한다면 코드스테이츠 AI 부트캠프가 좋은 기회일 수 있어요. 실무 중심 커리큘럼과 기업 프로젝트, 커리어 코칭, 졸업생 커뮤니티 등 탄탄한 시스템으로 데이터에 대한 A to Z를 능동적으로 배울 수 있어요!

👨‍🚀 데이터 사이언스 커리어의 시작,
AI 부트캠프가 더 궁금하다면?

추천글

코드스테이츠 스토리

코드스테이츠 AI 부트캠프ㅣ기업 협업 프로젝트

AI 부트캠프의 팀 프로젝트, 기업 협업 프로젝트에 대해 소개합니다.

2022년 11월 23일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 커리큘럼, 학습 시간표ㅣ수강생 일주일 미리보기

AI 부트캠프 탑승을 고민하고 있는 분들을 위해 부트캠프 커리큘럼과 학습 시간표를 소개합니다.

2022년 10월 19일

인사이트

머신러닝·딥러닝 모델 개념과 학습 원리ㅣ데이터 분할, 교차 검증

2022년 07월 15일

머신러닝 딥러닝 개념 파헤치기 2편

지난 머신러닝 딥러닝 차이점 콘텐츠에 이어 오늘도 머신러닝 딥러닝과 관련된 글을 준비했습니다. 먼저 짧게 지난 1편을 복습해볼까요?

인간의 학습 능력과 추론 능력, 지각 능력 등을 컴퓨터 프로그램으로 실현한 기술을 인공지능(Artificial intelligence)이라고 하며 그 연구 분야 중 하나가 머신러닝입니다. 딥러닝은 인공신경망을 이용한 머신러닝의 한 종류로 머신러닝의 하위 개념으로 볼 수 있습니다. 즉, 인공지능과 머신러닝, 딥러닝의 포함관계는 “인공지능 > 머신러닝 > 딥러닝” 로 표현해볼 수 있어요.

머신러닝과 딥러닝 모두 데이터를 분류하는 데 사용하는 기술이지만 두 기술의 가장 큰 차이점은 바로 사람의 개입 여부입니다. 더 자세한 내용이 궁금하시면 지난 콘텐츠에서 확인하실 수 있습니다.

머신러닝과 딥러닝은 차이점도 있지만 같은 뿌리를 둔 방법론인만큼 공통점도 많은데요. 이번 아티클에서는 머신러닝과 딥러닝에서 중요한 개념인 ‘모델’에 대해서 설명드리고 모델이 학습되는 원리와 효율적인 학습을 위한 데이터 분할에 대한 내용도 함께 정리했습니다.

이번 시간 다룰 내용 미리보기 🏷

  1. 머신러닝과 딥러닝의 기본 개념, 모델(Model)
  2. 머신러닝·딥러닝 모델이 학습되는 원리
  3. 학습을 위한 데이터 분할 (학습 데이터, 시험 데이터)
  4. 인공지능·머신러닝·딥러닝의 미래

머신러닝·딥러닝의 기본 개념, 모델(Model)

머신러닝, 딥러닝을 공부하며 앞으로 ‘모델(Model)’이라는 용어를 많이 보게 되실 텐데요. 모델의 정의를 먼저 짚고 가도록 할게요.

머신러닝 모델에서 ‘모델’이란?

머신러닝 모델, 딥러닝 모델은 물론 1편에서 배웠던 logistic regression 모델, SVM 모델 등등 여러 가지 방법론의 구현체를 ‘모델’이라로 부릅니다. 머신러닝과 마찬가지로 딥러닝도 ‘모델’이 여러 가지가 있습니다. 2개 이상의 모델의 출력을 융합시키는 앙상블 모델도 있답니다. 머신러닝과 딥러닝을 앙상블 할 수도 있고요.

만약 여러분이 머신러닝 프로젝트를 진행했다면, 누군가 “어떤 모델을 활용했어?”라고 물어볼 수 있고 그러면 여러분은 “logistic regression 모델을 활용했어.” 또는 “Yolo 모델을 활용했어” 하고 답변할 수 있습니다. 쉽게 말하면, 모델이란 ‘프로그램’과 유사한 의미라고 볼 수 있어요.

그럼 먼저 어떤 머신러닝 모델, 딥러닝 모델이 우리 실생활에서 쓰이고 있는지 살펴보겠습니다.

자율주행 자동차에서 활용하는 딥러닝 모델 🚗

자동차가 자율주행을 하려면 어떤 기능이 필요할까요?

자동차에 라이다(LIDAR/LiDAR, light detection and ranging)도 달려있어야겠지만, 간단한 설명을 위해 오직 카메라를 이용하여 아주 기초적인 1단계 수준의 자율주행을 한다고 가정해봅시다.

실제로 2015-2018년 자동차의 자율주행의 시작은 ‘크루즈 모드’라는 이름으로 출발하는데요. 60km/h 이상에서 정속주행을 할 수 있는 기능입니다. ‘가속’과 ‘감속’ 기능만을 구현하는 상황이라고 가정한다면, 앞에 차가 가까이 있으면 ‘감속’을 해야겠고, 차가 멀리 있으면 ‘가속’을 하면 되겠죠.

도로 위 자동차를 인식하는 yolo 모델

실제 활용 사례를 보여드리기 위해서 딥러닝 사물 인식 모델로 언급한 Yolo 모델에 도로 사진을 넣어봤어요. 좌측이 도로 사진, 우측이 yolo 모델에 넣어본 도로 사진입니다.

사진 내에서 자동차와 버스를 인식하고 그것들이 어느 위치에 있는지 네모 박스를 통해서 표현한 것을 볼 수 있습니다. 차를 표현하는 주황색, 버스를 표현하는 초록색 박스의 크기만으로도 앞 차가 가까운지 멀리있는지 알 수 있어 보이죠? 물론 이렇게 단순한 모델로만 자율주행이 되진 않습니다. 실제로 자율주행 기능이 있는 자동차 브랜드마다 사용하는 모델이 다를 테고요. 만약 비슷한 모델을 활용하더라도 그리고 지금처럼 단순한 이미지처리 뿐만 아니라 앞서 설명한 것처럼 앞차와의 거리를 측정하는 LiDAR 등과 결합해서 두 개 이상의 조건이 모두 만족하는 경우에만 ‘가속’을 한다든지 하는 안전장치들도 마련할 것이고, 여러 모델이 앙상블 된 모델을 활용할 수도 있겠죠.

버스, 사람까지 똑똑하게 구분하여 자율주행에 활용 🚶

위 사진에서 만약 도로에 사람 서있다면, 자율주행중인 자동차는 바로 멈춰야겠죠? 딥러닝의 활용에 대한 이해를 위해서 비교적 최신 모델인 Yolo-v5 모델을 이용해 보았습니다. Yolo-v5의 유명한 샘플 사진을 같은 모델에 넣어보았어요.

yolo-v5 모델에 넣어본 도로 사진, 사람과 버스를 구분합니다.

위 결과 이미지처럼 사람이 어디에 있는지, 버스는 어디에 있는지 찾아낼 수 있습니다. 이 위치에 따라서 자동차가 브레이크를 밟아야 할지 말지를 결정할 수 있겠죠.

이렇게 모델에 데이터를 넣는 것을 모델에 인퍼런스(inference) 한 결과라고 표현합니다. 인퍼런스에 걸리는 시간이 자율주행을 위해서는 굉장히 중요하기 때문에 inference time도 관심 있게 봐주셔야 합니다. Yolo v5 같은 모델은 이상적으로 FPS(Frame per second)가 140 이상이 되는 아주 빠른 모델입니다. 1초에 30 frame만 나와도 어느 정도 실시간으로 쓸 수 있을 테니 참 놀랍죠?

딥러닝이 없던 과거에는 자율주행 기술도 없었나요?

예전에도 컴퓨터비전 기술(line detection, HOG; 움직임 감지 기술) 등의 전통적인 머신러닝 기술을 활용해서 자율주행 등에서 쓰려고 노력했습니다. 확실히 딥러닝 시대에 비해서 성능은 좋지 않았죠. 그러나 예전 기술이 지금 쓰이지 않는다는 보장은 없어요! 이 역시도 앙상블 해서 좋은 결과를 만들 수 있다면 여전히 쓰고 있을지도 모릅니다.

시간 또한 중요한데요, 앞서 말씀드렸던 것처럼 Yolo 모델의 경우는 ‘딥러닝’ 모델임에도 실시간 처리가 가능한 inference time을 자랑합니다.

지금까지 자율주행 자동차에 사용될 수 있는 딥러닝 모델에 대해 간단하게 살펴보았습니다.

머신러닝·딥러닝 모델이 학습되는 원리

머신러닝 모델과 딥러닝 모델이 학습되는 원리를 한 마디로 요약하자면, 데이터와 레이블을 통해서 모델의 파라미터(Parameter)가 학습된다고 표현할 수 있습니다.

위 Yolo 예시를 학습한다고 하면, 자동차 이미지와 자동차의 윤곽선 박스(Bounding box, bbox)의 정보가 필요하겠죠? 또 자동차인지 버스인지 사람인지 알려줄 수 있는 클래스(Class)도 레이블이 필요합니다.

회귀만 있는 모델도 있고, 분류만 있는 모델도 있겠지만, 오늘 배운 Yolo 모델은 “bbox”가 어느 픽셀에 위치하는 지 연속적인 (x, y)위치 값 등을 회귀를 통해서 맞춰야 하고, 동시에 그 박스 내의 영상(이미지)이 어떤 카테고리(Class)인지 분류 문제까지 풀어야 합니다. 즉 데이터(Image)과 레이블(bbox 좌표 및 Class) 정보가 필요합니다.

좀 더 간단하게 표현을 해볼까요? 딥러닝이든 머신러닝이든 가장 간단한 함수의 형태로 표현할 수 있습니다. “y = ax + b” 이렇게 말이죠. 그 중에서 우리가 알고 싶고 학습하고 싶은 a, b가 파라미터(Parameter)입니다. 여기에서 학습 시 넣어주는 x는 데이터, y는 레이블이라고 할 수 있겠죠.

데이터와 정답을 알고 있으니까 대입해서 풀 수 있습니다. 모델이 데이터를 보고 학습해서 a, b를 찾아낼 수 있는 것입니다. 미지수가 2개인 “방정식”을 풀려면 2개의 데이터가 있어야 풀 수 있죠? “y = ax + b” 를 풀고자 한다면 최소한 2개의 데이터가 필요한 것입니다.

사실 딥러닝은 몇 백만(millions)에서 몇 십억(billions)개의 파라미터를 가지고 있어서 조금 다른 방식으로 풀어가는데요. 이런 모델은 학습 데이터로 수백만개의 데이터를 이용해서 학습을 진행해야 한답니다.

그러면 그 많은 데이터로 모델을 어떻게 학습시키는지 같이 알아볼까요?

딥러닝 모델 학습 준비 (1) 데이터 분할 (Split)

보통 공부를 너무 많이 했을 때 머리에서 ‘쥐’가 난다는 표현을 하죠? 컴퓨터도 한 번에 너무 많은 데이터를 넣어버리면 Out of Memory 문제로 터져버립니다. 그래서 일정량의 데이터로 분할을 해주는 과정이 필요해요. 더불어 학습을 위한 데이터와 검증을 위한 데이터를 따로 두어서 중간중간 잘 학습하는 지 평가하기도 합니다.

데이터 분할 개념을 학창시절 예시에 빗대어 알아볼게요.

  • 학교에서 적절한 난이도의 시험 문제를 만들어야 하는 수학 선생님이 있습니다.
  • 선생님은 이번 시험을 위해서 총 200문제를 만들어 두었습니다.
  • 시험 1주일 전, 40문제는 숨겨두고, 160문제만 학생들에게 공부하라고 정답과 함께 제공해 주었습니다.
  • 모의고사 날까지 학생들은 160문제를 열심히 풀면서 시험공부를 합니다.
  • 모의고사 날, 비공개로 해두었던 40문제 중에서 20문제를 선택해서 “1반 학생들”에게 풀어보게 합니다.
  • 여전히 숨겨둔 20문제는 비공개로 남겨둡니다.
  • 모의고사를 본 학생들에게 정답을 나눠주고, 각자 채점한 모의고사 성적을 본 뒤, 바로 진짜 시험을 보게 됩니다.
  • 시험이 끝나고 시험 점수를 공개합니다.

머신러닝 학습할 때에는 실제로 위 예시처럼, 학습(Training) 데이터(160문항), 모의고사와 같은 검증(Validation) 데이터(20문항), 실제 시험(Test) 데이터 (20문항)으로 구분을 합니다. 코드에서도 보면 다음처럼 데이터셋을 분할하는 과정이 들어갑니다. 아래 예시 코드는 학습용 데이터와 시험용 데이터를 구분하는 것이죠.

# sklearn.model_selection.train_test_split X_train, X_test, y_train, y_test = train_test_split( ... X, y, test_size=0.20)
머신러닝 딥러닝 학습을 위한 데이터 분할

그러면 컴퓨터가 터지지 않게 공부시키려면 어떻게 해야 할까요?

160문제를 한번에 풀기는 많으니, 20문제씩 8번에 걸쳐서 풀어보는 전략을 세울 수 있습니다. 여러분도 시험 공부를 할 때 비슷한 방식으로 공부했을 거에요. 물론 40문제씩 4번에 걸쳐서 풀 수도 있습니다. 조금 공부하다보면, 문제의 정답이 외워지기 때문에 문제의 순서도 바꿔서도 풀어봐야 겠죠?

딥러닝 모델 학습 준비 (2) 학습 분량 정하기 (Batch)

머신러닝도 앞서 설명했던 방법처럼 주어진 160문제를 몇 개로 나눠서 풀어보고 정답을 맞추어 보면서 틀린 것들과 맞은 것들을 확인하면서 공부합니다. 이렇게 한번 풀 수 있는 문제의 수를 배치사이즈(Batch_size)*라고 하고, 문제를 풀어보고 답을 맞춰보면서 틀린 것을 학습하는 한 번의 과정을 ‘이터레이션(Iteration)’ 이라고 합니다. 여러 iteration 을 거치면서 모델을 학습시키는데요. 한 번에 몇 문제씩 풀지 정하는 것을 주로 ‘batch_size’라고 표현합니다.

* 원래 Batch는 ‘일괄’이라는 의미가 있고, 지금처럼 푸는 방식은 Mini-batch라고 표현합니다.

배치사이즈대로 주어진 데이터를 이용하여 학습을 진행하고, 주어진 160문제를 전체를 다 풀었다면 “1 Epoch(에폭) 학습했다”라고 표현합니다. 그리고 자체적으로 모의고사를 봅니다. 점수가 60점이 나왔다면 추가로 다시 공부해야겠죠? 머신러닝은 학습과 모의고사를 반복하면서 학습합니다. 다시 모델은 160문제를 다 풀어보면, 한번 더 학습하고 나면 2 epoch이 지났다고 표현합니다. epoch를 반복하면서 머신러닝, 딥러닝이 이 문제의 순서를 외울 수 있으니 데이터의 순서도 무작위로 섞어서(shuffle) 다시 학습한다는 것도 꼭 기억하세요!

같은 방식으로 20번을 학습하라고 계획(Epoch=20)을 설정해두면, 머신러닝 모델은 이렇게 160개의 문제를 총 20번 풀어보게 됩니다. 총 3,200문제를 풀어본 것이 되는 거죠. 이렇게 많이 학습한다면 모의고사에서 100점을 받을 수 있을까요? 시험을 보면 어떨까요?

대망의 시험날, 과연 이 모델은 몇 점을 받았을까요?

앞서 머신러닝 모델이 학습하는 원리를 학창 시절 시험, 모의고사 예시를 통해 확인해보았습니다. 정리해보면, 머신러닝 학습을 위해서는 이렇게 3개의 데이터로 분류하는 작업이 필요합니다.

  • 160문제 : 연습하기 위한 데이터 = Training Dataset
  • 20문항 학습 중간 성적을 확인하는 모의고사 = Validation Dataset
  • 시험 20문항 = Test Dataset

이제 어느 정도 이해가 되시나요? 그럼 질문을 드려볼게요. 머신러닝, 딥러닝 모델은 어떻게 학습될까요? 바로 데이터와 레이블을 통해서 모델의 파라미터(Parameter)가 학습됩니다.

데이터는 시험문제, 레이블은 정답지, 모델의 파라미터는 공부하는 학생의 머리(뇌)라고 생각하시면 됩니다.

시험을 보는 주체인 사람과 같이 ‘모델’이 학습이 되어야 하는 것이고. 이 모델이 학습된다는 것은 주어진 파라미터들이 최적화된다는 의미에요. 추가로 최적화는 주어진 문제를 잘 푼다는 개념으로 봐주세요. 간혹 너무 학습을 많이 하게 되면, 문제를 외워서 새로운 문제에 적용하지 못하는 과적합(over-fitting) 문제가 발생할 수도 있기 때문에 ‘최적화’되는 것이 중요해요.

최고 효율 모델을 만드는 교차 검증(Cross Validation)

딥러닝 모델을 더 좋게 만들려면 어떻게 해야 할까요? 최적의 모델을 찾아내는 방법을 한번 생각해봅시다.

문제를 하나 내볼게요. 시험 문제 순서를 바꾸는 것만으로 학생들 성적에 영향을 줄 수 있을까요? 이 질문에 교육학 전문가들은 “Yes”라고 말해요. 적절한 난이도로 문제를 배치한다면 학생들이 쉽게 성적을 올릴 수 있기 때문인데요. 최근에는 TV 광고에서도, 스타트업에서도 인공지능을 이용해 학생 수준에 맞는 적절한 문제를 찾아주는 서비스도 있으니 어느 정도 증명이 된 방법이라고 할 수 있어요.

이처럼 머신러닝도 효과적인 학습을 위해서 교차 검증 등 다양한 시도를 해볼 수 있습니다.

시험을 내는 선생님의 입장으로 다시 돌아가 봅시다. 먼저 1반에서 160문제를 주고 공부하게 하고, 20문제로 모의고사를 봤습니다. 학습과 검증을 위해서 사용한 데이터가 180문항이죠. 같은 방법으로 수학 선생님은 1반-10반까지 모두 테스트를 해볼 수 있습니다. 그런데 총 180문항을 줄 때, 학습하는 문제와 모의고사 문제를 다르게 줄 수 있겠죠. 공부하는 순서를 바꿔보는 것인데요.

머신러닝에서도 이렇게 학습하는 데이터와 검증하는 데이터를 무작위로 섞어서 학습을 여러번 시켜보기도 하는데, 이를 교차 검증이라고 합니다. 문제를 다르게 받아본 1반-10 반 학생들의 성적이 달라지는 것처럼, 실제 머신러닝 모델도 교차 검증 시 결과가 달라집니다.

머신러닝 교차 검증

일반화

교차 검증의 목적은 여러가지가 있겠지만, 크게 2가지만 소개해볼게요. 첫번째는 일반화에요. 1반에만 테스트해보고 시험문제를 내는 것과 1-10반에 테스트를 해보고 시험을 내보면 어떤 문제가 더 변별력이 있을까요? 당연히 10개 반의 테스트를 해본 것이 더 변별력 좋은 문제를 만들어 낼 수 있을 거에요.

최적의 파라미터 찾기

성적이 다른 것은 시험보는 각 반의 학생들 실력이 다른것도 있지 않나요? “맞아요”

그러면 이런 학생들의 원래 실력을 어떻게 정의할 수 있을까요?

머신러닝, 딥러닝 모델에서는 학생들의 원래 실력같이 모델의 초기값*이라는 것이 있습니다. 이것을 잘 설정하는 것이 중요한데요, 초기값이 다르다는 것은 학생들의 출발점, 공부하기 전 원래 성적이 다르다는 것을 의미합니다.

* 초기값을 똑같이 맞추고, 같은 학습방법을 적용하면 머신러닝 모델은 항상 일정한 값을 내보냅니다. 실험이라는 것은 재현성, 똑같이 만들어 낼 수 있는게 중요하기 때문에 실험 때에는 초기값을 항상 정해두고 실험한답니다. 참고하세요!

초기값에 따라서 성적이 달라질 수 있기 때문에, 여러가지 다른 초기값을 가지고 같은 데이터로 학습을 해보면, 어떤 초기값이 더 좋은 지 알 수 있겠죠? 최적의 초기값을 찾기 위해서는 여러 시도를 해봐야겠지만, 우리는 편의 상 10번의 테스트만 해볼 거에요. 진짜 좋은 초기값을 찾으려면 이런 시도를 무수히 많이 해봐야 할 것입니다. 실제로 딥러닝에서는 어떤 초기값이 좋은 지 연구를 통해서 밝혀진 것들도 있답니다.

“열 번(1-10반)의 테스트만을 통해서 최적의 값을 찾아내겠다.” 이런 방식을 “10-fold 교차검증”이라고 합니다. 180문제를 총 10개의 그룹으로 나눈 뒤, 그룹1, 그룹2, …, 그룹 10으로 이름을 붙여줄 수 있습니다. 첫번째 모델은 ‘그룹1’문항을 검증 데이터셋으로 쓸 거고, 두번 째 모델은 ‘그룹2’ 문항을 검증데이터 셋으로 쓰는 원리로 총 10개의 모델을 만들어볼거에요. 이렇게 모의고사를 10번을 치르고 나면, 가장 성적이 좋은 반을 알 수 있을 거에요.

교차 검증을 통해서 찾은 이런 초기값처럼 우리가 앞으로 공부하게될 딥러닝, 머신러닝 모델을 최적화 해야하는 많은 지표들이 있을텐데요. 이 지표를 이제 Hyper-parameter라고 부르겠습니다.

이런 Hyper-parameter들을 잘 선정하는 것이 머신러닝과 딥러닝 모델의 성능에 꽤 중요한 역할을 하고 교차검증을 통해 최적의 Hyper-parameter들을 찾을 수 있습니다.

1반부터 10반까지 총 10번의 학습을 위한 테스트 과정을 거치게 되는데요, 10-fold라고 말씀드렸는데 5개로도 나눠서 할 수도 있을까요? 물론입니다. 5번 하면 5-fold 교차검증이라고 합니다. 주로 5와 10을 많이 쓴다는 것정도 기억해주세요.

인공지능·머신러닝·딥러닝의
현재와 미래 🌍

인공지능의 현재와 한계에 대해 잘 소개한 영상이 있어 소개해 드립니다. “인공지능에는 지능이 없다”라는 제목의 영상인데요. 영상에 나오는 다양한 한계에도 불구하고 인공지능은 산업계를 뒤흔들어 놓고 있습니다.

구글, 페이스북, 아마존, 마이크로소프트 등의 기술 주도 회사들은 딥러닝 인프라에 막대한 자금을 투입했습니다. 한국에서도 네이버와 카카오, 삼성, LG 등도 거대 인공지능 모델을 위해 엄청난 인프라를 구축하고 있습니다.

검색엔진을 기반으로 한 구글, 네이버 등과 광고 기술 기반의 페이스북과 아마존 회사들은 “자동화 광고 시스템”이나 “검색 엔진”에 대한 경험이 있기 때문에 이미 머신러닝 시스템과 친숙했습니다. 그래서 머신러닝과 딥러닝의 간단한 개념 전환만으로 오래된 머신러닝 시스템에 딥러닝을 적용했습니다. 삼성의 최신 카메라 기술에도 많은 딥러닝 기술들이 반영되었습니다.

이렇게 기술을 주도하는 회사들이 딥러닝, 머신러닝을 쓰는 것은 어찌 보면 당연한 일입니다. 그렇다면 다른 산업군은 어떨까요?

제조업 분야의 인공지능

삼성이나 하이닉스 등의 제조공정을 다루는 회사를 예로 들어보면, 반도체를 생산할 때, 모니터링하는 것이 매우 중요합니다. 컴퓨터를 조립했던 분이라면 CPU의 Clock 수, 3.1GHz, 2.9GHz 이런 단어들을 들어보셨을 텐데요. 컴퓨터의 성능의 핵심인 이런 부품들도 원래 계획한 도면대로 만들지만 제품의 상태에 따라서 3.1이 되기도 하고, 2.9가 되기도 합니다. 그만큼 생산할 때도 일관성을 맞추는 것은 대단히 어려운 문제일 수 있다는 것입니다. 일관된 반도체를 생산하기 위해서 중간중간 측정한 데이터를 어떻게 사용할 것인지도 중요해지고 있습니다.

신약 개발 분야의 인공지능

제조업뿐만 아닙니다. 최근 카카오브레인에서도 신약 개발을 위한 팀을 새롭게 구성한 바 있는데요, 딥러닝은 신약 개발에서 큰 두각을 나타내기 시작했습니다. 딥러닝으로 신약 개발을 하는 회사가 상장되는가 하면, 여러 스타트업도 생겨나고 있습니다.

신약 개발은 여러 단계를 거쳐 이루어집니다. 임상실험 전 단계에서는 간접적으로 실험관 튜브와 무척추동물 속에서 또 척추동물에도, 여러 신약의 효과를 실험합니다. 일차 실험이 통과하면 다음으로 임상실험 단계로 넘어가서 지원자를 통해 직접적으로 치료를 실험합니다. 이렇게 동물과 인간 모두에 대해 실험에서 성공해야 신약이 승인되고, 드디어 식약처 등에서 판매에 대한 승인을 얻게 됩니다. 이 과정이 매우 복잡하고, 검증하기도 어렵기 때문에 때로는 몇십 년 된 약을 아직도 먹고 있습니다.

딥러닝을 이용한 단백질 합성 시물레이션 (출처 : 구글 딥마인드)

연구원은 신약 개발 과정의 각 단계를 직접 실험하기보다, 컴퓨터로 시물레이션을 통해서 최적화하는 모델을 구축하기 시작했습니다. 예를 들어 분자구조 딥러닝을 추정해서 신약의 잠재적 독성을 예측하는 문제, 분자 설계, 합성을 효율적으로 하는 방법 등에 대한 연구가 학회 등에서 많이 발표되고 있습니다. 알파고 이후에 알파폴드(AlphaFold)라고 해서 단백질들의 구성을 딥러닝으로 예측하는 모형들이 유명합니다. 많은 실험이 기반이 되고, 물리화학적 특징들을 딥러닝이 학습하면, 앞으로도 더 많은 데이터가 쌓일 것이고, 생물정보학(bioinformatics)과 화학적 딥러닝 모델 설계가 지속해서 발전하여 제약회사의 생태계도 크게 바뀔 수 있습니다.

법조계의 인공지능

인공지능(AI) 변호사의 변론과 인공지능 판사의 판결이 예상되는 가운데 이제, 인공지능은 법조인의 자격을 결정짓는 사법 시험에까지 관여하기 시작했습니다. 판례 분석과 법률 상담까지 AI가 가능한 세상이 오고 있는 것인데요. 인공지능 아나운서도 생겨나고 있는 시대이기 때문에 법률 분석만 제대로 된다면 인공지능 변호사가 생기는 것은 시간문제 아닐까요?

이 외에도 로봇공학, 금융, 모빌리티, 오픈마켓, 부동산, 농업에 까지 수많은 기업들이 생겨나고, 딥러닝은 막대한 영향력을 끼치고 있다.

딥러닝을 기반으로 한 다양한 산업 (출처 : 지능정보산업협회)

미래의 인공지능에 대한 전망

이밖에도 무수히 많은 사례들이 있겠지만, 위 사례만으로도 “딥러닝으로 모든 것을 할 수 있다.”라고 말해도 과언이 아닙니다. 인공지능으로 대체할 수 없는 직업과 관련된 글과 신문기사가 하루가 멀다하고 쏟아지고 있는 세상이죠. 사람이 할 수 있다면, 그리고 심지어 반복되는 일이라면 딥러닝과 머신러닝으로 대체할 수 있는 세상이 가까워지고 있는 것인데요. 딥러닝 시대로 빠르게 흘러가는 변화 속에서 어떻게 딥러닝, 머신러닝을 잘 활용할 수 있을지 미래를 준비하는 자세가 필요할 것 같습니다.

데이터 입문을 위한 A to Z
코드스테이츠 AI 부트캠프

지금까지 방대한 데이터를 분류하는 데 사용하는 기술인 머신러닝, 딥러닝 모델과 학습 원리에 대해 알아보았는데요. 인공지능, 데이터 전공자는 아니지만 관련 분야에 대해 스터디하고 관련 커리어로 나아가길 희망한다면 코드스테이츠 AI 부트캠프가 좋은 기회일 수 있어요. 실무 중심 커리큘럼과 기업 프로젝트, 커리어 코칭, 졸업생 커뮤니티 등 탄탄한 시스템으로 데이터에 대한 A to Z를 능동적으로 배울 수 있어요!

👨‍🚀 데이터 사이언스 커리어의 시작,
AI 부트캠프가 더 궁금하다면?

추천글

코드스테이츠 스토리

코드스테이츠 AI 부트캠프ㅣ기업 협업 프로젝트

AI 부트캠프의 팀 프로젝트, 기업 협업 프로젝트에 대해 소개합니다.

2022년 11월 23일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 커리큘럼, 학습 시간표ㅣ수강생 일주일 미리보기

AI 부트캠프 탑승을 고민하고 있는 분들을 위해 부트캠프 커리큘럼과 학습 시간표를 소개합니다.

2022년 10월 19일

코드스테이츠 스토리

코드스테이츠 AI 부트캠프 사전설명회ㅣ수료생 LIVE Q&A 세션

아직 AI 부트캠프 탑승이 망설여진다면? AI 부트캠프 사전 설명회에 참여해 궁금했던 점을 물어보세요!

2022년 09월 05일

Toplist

최신 우편물

태그