본문 바로가기

AI

[딥러닝 시리즈] ① 딥러닝으로 풀고자 하는 문제에 대하여

딥러닝 시리즈는  딥러닝 기본 개념을 복습하고, 심화 내용을 스터디하기 위해 시작한 포스팅입니다.

딥러닝을 연구하시는 모두의 피드백과 의견, 소통을 환영합니다 :)  


세상에는 수많은 문제들이 있다.

 

오늘 점심은 무엇을 먹을지부터 시작해서 

수도권에 사는 다섯 명의 친구들과 약속 장소를 잡는데 중간 지점을 찾는 문제,

메일을 쓰기가 너무 귀찮은데 키워드만 넣으면 알아서 써줄 수는 없나 하는 것까지.

 

이 중에는 <딥러닝>을 사용해서 풀어낼 수 있는 문제도 있고, 그렇지 않은 것도 있을 것이다.

 

AI가 워낙 핫하다보니 친구들이랑 얘기하다 보면 

간혹 "AI로 이런 거는 안되나" 하는 주제가 나온다.

 

그럴 때면 나는 직업병처럼 딥러닝을 활용하여 문제를 성공적으로 풀어내기 위해

고려해야 하는 세 가지 포인트에 대해 생각해버린다.

 

첫 번째, 문제에 대한 출력은 무엇인가

두 번째, 문제를 풀기 위해 어떤 데이터가 주어지는가

세 번째, 알고리즘이 성공적이라는 것을 어떻게 판단할 수 있는가

 

일상적인 대화에서 이런 관점으로 진지하게 대답해버리면 이상한 사람이 될 수도 있지만(?)

실제로 딥러닝을 활용해서 애플리케이션을 구현하기 위해서는 위의 세 가지를

정말 진지하게, 그리고 세밀하게 검토해 보아야 한다!

 

 문제에 대한 출력은 무엇인가

먼저 해결하고자 하는 문제가 < 어떤 출력 >을 얻고자 하는 것인지 파악해야 한다.

 

<메일을 쓰기가 너무 귀찮은데 키워드만 넣으면 알아서 써주는 앱>을 만들고 싶다면?

출력은 <단어들의 시퀀스로 이루어진 잘 써진 메일>이 될 것이다.

 

<카메라를 통해 계산대 위에 어떤 상품이 놓여 있는지 인식하는 모듈>을 만들고 싶다면?

출력은 <상품 카테고리>이다.

 

<내 로봇 청소기가 멍청한데 최적화된 경로로 움직이게 하는 알고리즘>을 만들고 싶다면?

출력은 <다음 번에 움직일 방향과 그 거리>가 될 수 있다.

 

문제에 대한 출력을 정의하는 것은 중요하다.

▲ 어떤 알고리즘 / 학습 / 모델을 사용해야 할지 결정하는 데에 필수적이기 때문이다.

 

  메일 쓰기가 너무 귀찮은데
키워드 넣으면 써주는 앱
계산대 위에 어떤 상품이 놓여 있는지 인식하는 모듈 내 로봇 청소기가 멍청한데 최적화된 경로로 움직이게 하기
모델의 출력 단어의 시퀀스 인식한 상품의 카테고리 움직일 방향과 그 거리
사용할 수 있는 알고리즘 Sequence-to-sequence
Generation
Image Classification Reinforcement Learning

 

 문제를 풀기 위해 어떤 데이터가 주어지는가

다음으로 해당 결과를 도출하기 위해 < 모델이 활용할 입력 데이터 >가 무엇인지 파악해야 한다.

 

현실에서 딥러닝을 도입해 문제를 해결하고자 할 때

모델을 학습하기 위해 데이터셋부터 준비해야 하는 경우가 있다.

 

따라서 입력 데이터를 파악하는 것은

▲ 학습 데이터셋을 준비하기 위해 필수적이다.

 

머신러닝 계열의 알고리즘이 모두 그렇듯 딥러닝 역시도 좋은 모델을 학습을 위해

질, 그리고 대량의 데이터가 반드시 필요하다.

 

이런 데이터를 확보하기 위해서는 모델이 어떤 것을 입력받아 처리하게 될지 생각해야 한다.

 

  메일 쓰기가 너무 귀찮은데 
키워드 넣으면 써주는 앱
계산대 위에 어떤 상품이 놓여 있는지 인식하는 모듈 내 로봇 청소기가 멍청한데 최적화된 경로로 움직이게 하기
입력 데이터 메일에 들어가야 할 키워드 계산대 위에 놓인 상품 사진 이전 지점의 좌표, 집 구조, 청소 완료한 구역 정보 등...

 

 알고리즘이 성공적이라는 것을 어떻게 판단할 수 있는가

 

마지막으로 < 모델이 잘했다는 것을 판단할 수 있는 수치화된 척도 >를 생각해야 한다.

딥러닝 모델이 추론한 출력이 내가 기대한 출력과 얼마나 비슷한지, 혹은 다른지를 결정하는 객관적인 수치를 정하는 것이다.

 

이를 통해

▲ 딥러닝 모델을 성공적으로 학습할 수 있을지 미리 각을 재볼 수 있고

▲ 향후 Loss function 설계 및 학습 설계에 활용할 수 있다.

 

모델이 잘했는지를 판단할 수 있는 수치화된 척도를 정의할 수 없다면

풀고자 하는 문제를 해결하는 데에 딥러닝이 적합한지 다시 한번 생각해볼 필요가 있다.

 

개인적인 생각으로는 추상적인 아웃풋을 다루는 문제 (Generation 분야 등)의 경우

모델의 성공 정도를 수치화할 수 있는 함수가 모호하여 원하는 아웃풋을 얻지 못하는 경우가 있다.

이런 경우 기대하는 아웃풋을 모델에게 학습시킬 수 있는 loss 함수를 잘 설계하는 것이 중요하다. 

 

  메일 쓰기가 너무 귀찮은데 
키워드 넣으면 써주는 앱
계산대 위에 어떤 상품이 놓여 있는지 인식하는 모듈 내 로봇 청소기가 멍청한데 최적화된 경로로 움직이게 하기
기대하는 결과 ▲정답으로 라벨링된 메일이랑 최대한 비슷해야 한다. ▲실제 놓여있는 상품으로 정확하게 분류하기 ▲청소가 끝났을 때 온 집안이 깨끗하기
▲청소 시간을 최소로 하기
사용할 수 있는 수치 척도 ▲생성한 단어 단위로 정답 단어가 맞는지, 아닌지 점수주기 ▲정답 상품 카테고리로 분류한 정도에 따라 점수 주기 ▲ 청소한 면적을 보상, 주고 움직인 거리를 패널티로 주기

 

이러한 세 가지 포인트를 구체화하고, 학습에 적합한 데이터까지 수집했다면

성공적인 모델 확보를 위한 순조로운 첫걸음을 내딛은 것이다.

 

 

그다음으로는

▲모델이 잘했다는 것을 판단할 수 있는 수치화된 척도를 피드백할 수 있는 Loss 함수를 설계하고

▲입력 데이터로부터 필요한 정보(feature / representation)를 추출할 수 있는 모델 아키텍처를 설계하여

▲적절한 optimizer을 활용해서 데이터를 통해 모델을 학습시키는 단계가 있다.