[Ⅲ. Structuring Machine Learning Projects] Learning from Multiple Tasks (1)
Structuring Machine Learning Projects
Learning from Multiple Tasks
Transfer Learning
딥 러닝의 효과적인 아이디어 중 하나는 한가지 업무에서 학습한 지식을 다른 업무에 적용시킬 수 있다는 것입니다. 예를 들어 신경망 네트워크가 고양이와 같은 개체를 인식할 수 있도록 학습시킬 수 있고 그 지식을 이용해서 부분적으로 엑스레이 스캔 판독에 도움이 되도록 할 수 있습니다. 이것을 전이 학습이라고 부릅니다.
신경망에 이미지 인식을 학습시켰다고 해 봅시다. 먼저 신경망을 X와 Y쌍에 대해 학습시킵니다. X는 이미지이고 Y는 어떤 개체입니다.
이미지는 고양이나 개, 새 등이 될 수 있을 텐데요. 이 신경망을 이용해서 방사선 진단과 같이 다른 작업에서 학습한 것 즉 엑스레이 스캔을 제대로 판독하는 능력을 조정하고 싶을 경우 다른 말로 하면 이전하고 싶을 경우 신경망 네트워크의 이 마지막 결과값 레이어를 삭제하고 그 마지막 결과값 레이어에 주어진 가중치도 삭제합니다.
그런 다음 마지막 레이어에 대해서만 가중치 한 세트를 무작위로 초기화해 생성합니다. 그리고 나서 방사선 진단 결과를 내게 합니다.
구체적으로 얘기하면 이미지 인식 작업을 훈련시키는 첫번째 단계에서 신경망을 위한 모든 통상적 매개변수 모든 가중치, 모든 레이어를 훈련시키면 학습을 통해 이미지 인식 및 예측이 가능한 프로그램이 나옵니다.
이 신경망을 훈련시킨 뒤에는 이제 이전 학습 구현을 위해 새 데이터셋 X Y를 넣는데 이것은 방사선 이미지이고 Y는 예측하려고 하는 진단입니다.
이제 마지막 레이어의 가중치를 초기화해야 합니다.
이를 랜덤으로 W.L P.L이라고 부르겠습니다. 이제 새 데이터셋 새로운 방사선 데이터셋에서 신경망을 다시 훈련시킵니다. 방사선 데이터로 신경망을 다시 훈련시키는 방법에는 몇 가지 선택지가 있습니다.
만약 방사선 데이터셋이 별로 없는 경우 마지막 레이어의 가중치만 다시 훈련시킬 수 있습니다. $W^{[L]}, b^{[L]}$만 훈련하고 나머지 매개 변수는 고정시킵니다. 데이터가 충분히 있는 경우 나머지 신경망에 대한 부분도 모든 레이어를 재훈련시킬 수 있습니다. 경험적으로 보면 데이터셋이 작은 경우 결과값 레이어에서 마지막 레이어만 다시 훈련합니다. 마지막 한 두개 레이어요. 하지만 데이터가 많은 경우 네트워크의 모든 매개 변수를 다시 훈련시킬 수 있습니다.
모든 신경망의 매개 변수를 다시 훈련하는 경우 이러한 이미지 인식 기능에 대한 첫번째 단계의 훈련을 사전 훈련이라고 부릅니다. 신경망의 가중치를 사전 초기화 또는 사전 훈련하기 위해 이미지 인식 데이터를 쓰기 때문에 그렇습니다. 그리고 가중치를 나중에 업데이트하는 경우 방사선 데이터에 가끔 훈련시키는 것은 미세 조정이라고 합니다.
딥 러닝의 맥락에서 이전 학습과 관련된 사전 훈련이나 미세 조정은 저런 뜻이라고 생각하시면 됩니다.
이 예시에서는 이미지 인식에서 얻은 지식을 영상의학 진단에 응용하거나 이전했습니다. 이것이 유용한 이유는 테두리나 커브, 객체 탐지와 같은 많은 저수준 특성 덕분입니다. 이렇게 아주 큰 이미지 인식 데이터셋을 기반으로 학습하게 되면 학습 알고리즘이 더 나은 영상의학 진단 결과를 도출할 수 있습니다.
이미지의 구조와 생김새에 대해 많은 학습이 이루어지며 이런 지식이 유용할 수 있습니다. 이제 이미지를 인식하는 방법을 배웠으니 이미지들의 어느 부분이 다른지 분간하는 방법도 충분히 배웠을 수 있습니다.
라인이나 점, 커브 객체의 작은 부분들에 대한 지식들 이런 지식들은 영상의학 진단 네트워크가 더 빨리 또는 더 적은 데이터로 학습하는 데 도움을 줄 수 있습니다. 또 다른 예시를 보겠습니다.
음성인식 시스템을 훈련시키는 상황에서 X는 오디오나 오디오 조각의 입력값 Y는 해석이라고 해 봅시다. 여러분은 음성을 글로 옮겨 출력하기 위해 음성인식 시스템을 훈련시켰습니다. “웨이크 워드” 또는 “트리거 워드”를 감지하는 시스템을 만든다고 해 보겠습니다.
앞서 말씀드렸지만 웨이크 워드 또는 트리거 워드는 음성 인식 기기를 깨우거나 작동시키기 위해 말하는 단어입니다. 아마존 에코 작동을 위한 “알렉사” 구글 기기를 깨우기 위한 “오케이 구글” 애플 기기에는 “헤이 시리” 바이두 기기에는 “니하오 바이두” 등입니다.
이를 위해서는 신경망 네트워크의 마지막 레이어를 꺼내 새로운 결과값 노드를 만들어야 합니다. 하지만 때로는 한 가지 새로운 결과값이 아니라 신경망에서 여러 개의 새로운 레이어를 생성할 수 있습니다. 웨이크 워드 탐지 문제를 위한 레이블 Y를 붙이기 위해서요.
이제 데이터 보유량에 따라 네트워크의 새 레이어를 재훈련하거나 신경망의 레이어들을 더 많이 훈련할 수도 있습니다. 그러면 언제 전이 학습이 필요할까요? 그것은 바로 출발 지점에 문제 관련 데이터가 많고 도착 지점에는 관련 데이터가 적은 경우입니다.
예를 들어 음성 인식 작업을 위한 백만개의 예시가 있다고 하면 저수준 특성 학습을 위한 데이터가 많은 것이거나 신경망 네트워크의 초기 레이어에서 유용한 특성을 배울 수 있는 데이터가 많은 것인데요. 이와 달리 영상의학 쪽 작업에는 100개의 샘플만 있는 상황일 수 있습니다. 영상의학 진단 문제에 대해서는 데이터가 아주 조금 있는 거죠. 엑스레이 스캔 100장 정도로요.
따라서 영어 인식에서 배운 많은 지식이 있다면 영상의학 쪽에서 데이터가 많이 없더라도 이전된 지식으로 많은 도움을 받을 수 있습니다. 음성인식의 경우 시스템에 데이터를 만 시간 훈련시켰다고 하면 인간의 목소리가 그와 비교해 어떻게 다르게 들리는지 많은 학습을 할 수 있습니다. 상당한 시간이죠.
하지만 트리거 워드 쪽에는 1시간 분량의 데이터만 있을 수 있습니다. 많은 매개변수를 넣기에는 충분치 않습니다. 이 경우 인간 목소리가 어떻게 들리는지 인간의 발화 요소가 무엇인지에 대해 얻은 학습 내용이 좋은 웨이크 워드 감지 기능을 구축하는 데 아주 유용할 수 있습니다.
데이터셋이 상대적으로 작거나 적어도 웨이크 워드 감지에는 충분치 않은 데이터가 있다고 해도요. 이 두 예시는 모두 많은 데이터를 보유하고 있는 문제에서 적은 데이터를 가지고 있는 문제로의 이전입니다.
전이 학습이 유용하지 않은 경우는 그 반대 경우입니다. 만약 이미지 인식 쪽에는 이미지 백 장이 영상의학 진단 쪽에는 이미지 백 장 또는 천 장이 있다면 영상의학 진단을 잘 하기 위해서는 영상의학 진단에서 좋은 결과를 내기 위해서는 고양이와 개 이미지보다는 영상의학 이미지가 있는 편이 훨씬 유용하겠죠.
그래서 여기 있는 예시들은 저쪽의 예시보다 훨씬 중요합니다. 적어도 좋은 영상의학 시스템을 만들기 위해서는요. 그러므로 이미 영상의학 관련 데이터가 더 많은 경우 고양이나 개, 자동차 등의 임의의 객체 이미지 100장은 별로 도움이 되지 않을 것입니다.
그 이유는 고양이와 개 이미지 인식 작업의 이미지 샘플 하나가 엑스레이 이미지 샘플 하나보다 덜 중요하기 때문입니다. 좋은 영상의학 시스템을 만드는 데 있어서 말이죠. 이런 경우 전이 학습을 써서 나쁠 것은 없다고 해도 그다지 의미 있는 결과는 기대할 수 없습니다.
이와 비슷하게 10시간 분량의 데이터로 음성인식 시스템을 만들었고 실제로 10시간 보다 더 많은 가령 50시간 분량의 데이터가 웨이크 워드 감지 쪽에 있다고 하면 나쁠 건 없을지 몰라도 데이터 10시간을 전이 학습에 포함한다고 해서 의미있는 결과가 나오지도 않을 것입니다.
이제 요약해 보겠습니다. 전이 학습은 언제 유용할까요?
만약 A작업에서 학습한 뒤 그 지식 일부를 B작업으로 넘기려고 한다면 전이 학습이 유용할 수 있습니다. 두 작업이 같은 입력값 X를 가진 경우요. 첫번째 예시에서는 두 작업의 입력값은 모두 이미지입니다.
두번째 예시에서는 두 작업의 입력값은 모두 오디오 클립입니다. B 작업보다 A 작업에 대한 데이터가 더 많을 때 의미가 있어야 합니다. 이 모든 것의 가정은 B 작업을 더 잘 하고 싶다는 것입니다. B 작업에는 B 작업의 데이터가 더 중요하기 때문에 보통은 A 작업의 데이터를 더 많이 가지고 있어야 합니다. 각 A 작업 샘플이 B 작업 샘플보다 가치가 덜하기 때문입니다.
마지막으로 전이 학습이 유용한 경우는 A 작업의 저수준 특성이 B 작업 학습에 도움이 될 수 있다고 판단되는 경우입니다. 이전의 두 예시에서는 이미지 인식 학습을 통해 이미지에 대해 배운 지식이 영상의학 진단에 도움을 줄 수 있으며 음성 인식 학습을 통해 인간 음성에 대해 배운 지식이 트리거 워드나 웨이크 워드를 감지하는 데 도움을 줄 수 있습니다.
요약하자면 전이 학습은 데이터가 상대적으로 많이 없는 B 작업을 잘 하려고 할 때 유용했습니다. 예를 들어 영상의학에서는 좋은 영상의학 진단 시스템 구축을 위한 많은 양의 엑스레이 이미지를 수집하기가 어렵습니다. 이런 경우 관련된 약간은 다른 작업을 찾아볼 수 있습니다. 이미지 인식과 같은 작업 말이죠 백만 개의 이미지를 통해 여러 특성들을 배울 수 있겠죠. 그 다음 영상의학 작업인 B 작업에서 데이터가 많이 없더라도 좋은 결과 도출을 시도할 수 있습니다.
전이 학습이 언제 유용할까요? 전이 학습은 알고리즘의 성능을 크게 개선할 수 있습니다. 그런데 가끔은 이전 학습이 A 작업의 데이터가 B 작업의 데이터보다 적은 경우에도 사용되는 게 보이는데 이 경우 큰 소득을 기대할 수 없습니다.
이제 전이 학습에 대한 내용은 여기까지인데요. 한 작업에서 학습한 뒤 그 지식을 다른 작업으로 이전하는 것이었습니다. 또 복수의 작업을 기반으로 학습하는 다른 학습 유형이 있는데요. 다중 작업 학습이라고 합니다. 한 가지 작업을 학습하는 것이 아니라 다수의 작업을 동시에 학습한 뒤 다른 작업으로 이전하는 것입니다. 다음에 다중 작업 학습에 대해 다뤄보겠습니다.
댓글남기기