본문 바로가기
Machine Learning

딥러닝의 unsupervised learning 부분에 대한 제 이해..

by 임은천 2014. 12. 12.
쉬운 예를 하나 들어보면 좋겠네요. 가령, Hyunwoong Jang 님과 Hyunmin Kim 님께서 이동윤 님을 현실 세계에서 보고 그림을 그린다고 하죠. 그리고 현민님은 왼쪽에서 현웅님께서는 정면을 보고 그린다고 하구요.. 그럼 분명 같은 사람의 얼굴을 그리지만.. 다른 그림이 나오겠죠.. 그럼.. 같은 방향에서 그리면 같은 그림이 나올까요? 물론 그림 그리는 것은 그 사람의 그림 실력에 따라 달라진다고 하지만.. 어떤 사람은 세밀하게 그릴 수도 있고, 어떤 사람은 커리커쳐 형태로 그릴 수도 있죠.. 그것을 모델링이라고 부릅시다. 왜냐하면 모델링은 현실의 approximation이니까요..
자 똑같은 일을 딥러닝 알고리즘에게 시켜봅시다. 정면에서 그리기..
그럼, 아마 현민님이나 현웅님께서 그리는 것처럼 뭔가 저 사람을 표현하는 정보를 추출하려고 시도할 것입니다. 하지만, 동윤님의 얼굴은 유니크한 특성을 가지고 있고.. 그것을 함수로 표현하려면? 여러 함수를 조합할 수 있겠죠.
먼저 1차원에서 시작해 보죠.. 동윤님의 얼굴을 그릴려면 무슨 모델이 필요할까요? 동윤님의 얼굴이 어떻게 생겼던지.. 이 단계의 모델링에서는 무조건 선만 나옵니다. 1차원이 제약조건이므로.. 아쉽게도 아직 원은...

이제 2차원에서 생각해 보면.. 1차원 함수들의 특성을 표현하는 combined 함수를 만들 수 있습니다. 그래서 선을 한 0.01 mm 단위로 한 5882개 정도 합쳤더니 타원과 비스무리하게 되었습니다. 어 동윤님 얼굴 외곽선이 되었네요. 한 20개정도 붙이니 눈이 되고 그와 똑같은 것을 붙였습니다.

그리고 3차원에서 이용되는 각종 transformation 들을 구현하는 모델링 뉴런 집합을 만들었습니다.(가령 돌리기, 이동시키기, 잡아 늘이기, 줄이기, 키우기, 등등..) 그리고, 개별 뉴런 집합을 조합해서 동윤님 얼굴을 보고 있는 패턴에 맞게 그리도록, hierarchical하게 조합을 했습니다..(마치 functional programming하는 느낌..)

이제 이 단계에서 대략적인 원이나 타원, 혹은 코에 보이는 선이나 머리카락 등등 위치는 잡았다고 보죠.. 그런데.. 원래 눈으로 보이는 것보다1차원에서는 선의 길이가 제각각 조금씩 안맞으니깐.. 조금조금씩 줄였다 늘였다 각각 자기가 맞은 모델링 부분에 맞게 하면서 가중치를 조정해 주구요.. 2차원에서는 움직여 볼 수 있는 것 있으면 조금씩 더 맞게 조정해 보고.. 3차원에서는 움푹 페이거나 원근감을 준다거나.. 뭐 그런식으로 조금씩 명암 조절도 해보고.. 다양하게 해봅니다. 가중치 조절하면 영향을 받는 곳이 좀 더 많겠네요... 왜냐하면 히어라키니깐..

즉 마치 우리가 데셍할 때, 대략적인 윤곽 그리고 나서 점점 명확하게 그리는 것처럼.. 해당 위치에 적용해야 하는 하위 뉴럴 모델들의 위치가 점점 잡혀가게 되고.. 최종적으로 원래 동윤님 얼굴과 내가 그린 그림이 거의 유사하게보이는 경우(물론 현민님의 경우 현민님이 봤을 때는 현민님의 모델에서는 이정도면 동윤님 얼굴임을 인식 가능, 장현웅님 관점에서는 이 정도면 동윤님 얼굴임이 인식 가능)가 된다면 수렴한 것이지요.. 물론, 완전히 같지 않고.. 약간의 에러가 있을 것입니다. 물론 뭐 현민님이나 현웅님께서 엄청난 극사실 주의의 모델링 능력을(가령 수억만 화소의 시신경 레벨의 모델링 능력)을 가지고 있고.. 가지고 있는 도구(가령 펜슬이 아니라 파티클 레벨로 그릴 수 있는..) 다면 그냥 동윤님 얼굴이 진짜인지.. 모델이 진짜인지 모를 정도도 될 수있겠죠.. 우리의 꿈에서는요.. 다만.. 이건 현실세계나 학문 세계에는 없다는 거..

자 이제 개별 사람마다 동윤님의 얼굴을 어떻게 그리는 지 알게 되었고.. 어떤 요소가 어떤 단계로 구성되는지 알게 되었기 때문에, 동윤님의 얼굴을 보면 반가워요 동윤님 하고 반응할 수 있게되는 것이겠죠.

끝으로 정리하려면, 원래 그리고자 했던 실제에서 중요한 패턴 중에 해당 차원에서 가능한 모델링을 수행하고, 다음 차원에서 가능한 모델링을 수행하고.. 분명 단방에 모델링이 입력 패턴을 그대로 나타내지 못할 것이므로 가중치를 변화 시켜가면서 신호에 대한 반응성을 바꿔가다 보면, 원래 입력에 대비해서 얼마 정도의 entropy 감소가 있는지 알게 되겠죠..
쓰고 나니 제 얼굴 그리는 걸로 할 걸 그랬네요.. 그래도 비전 그룹 대장님이시니깐.. 이해가 쉬운 예제는.. 잘 알고 있는 분이면 좋으므로.. 부득이하게 동윤님 얼굴로 선택했으니.. 화내지 않으셨으면 좋겠습니당. ㅠㅠ 이 글은 원래 비전인식 커뮤니티에 올렸다가 너무 길어서.. 제가 나중에 찾아 보기에 어렵기 때문에 옮겼습니다.


댓글3

  • 장현웅 2014.12.13 01:36

    1. 이제 2차원에서 생각해 보면.. 1차원 함수들의 특성을 표현하는 combined 함수를 만들 수 있습니다. 그래서 선을 한 0.01 mm 단위로 한 5882개 정도 합쳤더니 타원과 비스무리하게 되었습니다. 어 동윤님 얼굴 외곽선이 되었네요. 한 20개정도 붙이니 눈이 되고 그와 똑같은 것을 붙였습니다.
    - 이건 CNN에서 pooling-subsampling 과 같은 것인가요??

    2. 그리고, 개별 뉴런 집합을 조합해서 동윤님 얼굴을 보고 있는 패턴에 맞게 그리도록, hierarchical하게 조합을 했습니다..
    2-1.최종적으로 원래 동윤님 얼굴과 내가 그린 그림이 거의 유사하게보이는 경우
    - supervised learning은 출력값에 대해서 weight를 조절하지만 unsupervised learning에서 봤을 때, 출력값을 모르니 입력값에 대해서 패턴을 보고 조절(조합)하는 건가요?

    저는 CNN을 구현해보려고 하는데요 (unsupervised learning)
    이미지를 트레이닝 하는 과정을 이해하고 싶습니다.
    supervised learning은 출력값을 보고 거꾸로 weight를 조절해 나가면 가능할 거라고 이해가 됩니다.
    unsupervised learning은 입력값을 보고 지속적으로 hidden layer 마다 비교해서 조절하는건가요? ㅠㅜ

    너무나도 친절하고 이해가 되기 쉬운 답변 감사합니다.
    예를 들어주신 것도 이해되기 쉽고 좋았습니다.!
    답글

  • 임은천 2014.12.13 04:51 신고

    1. 일단, 이 질문은 현웅님께서 이미 어떤 개념을 알고 있고 그것과 연관을 시켜보고 싶고.. 혹시 제가 그것에 대해 알고 있다면, 확신을 가지고 싶다는 것으로 이해했습니다. 저는 그 개념을 아직 공부하지 않았습니다. 그래서 확신을 드릴 수는 없네요. 다만, 저 또한 소프트웨어 개발자이므로 구현 관점에서 조언을 드리자면, 해당 개념을 구현해 보고 동작하는지 확인해 보세요. 의도한 것대로 결과가 나오는지.. pooling-subsampling의 개념을 알고 질문하신 것이므로 구현하실 수 있을 것으로 생각합니다. 그렇다면, 그것이 제가 설명한 것과 유사하게 동작한다면, 아마 구현이 되겠죠.. 다만, 정말 발전을 원하신다면, 그대로 따라 구현해 보시고.. 거기에서 배운 것을 토대로 현웅님 만의 방법으로 다시 구현해보시길 바랍니다.
    2-1. 네. 응용하려고 하는 부분이 "동윤님 얼굴 그리기"에 국한된다면요.. 다른 걸 배울 필요는 없겠죠. 무슨 말이냐면.. 동윤님 얼굴 말고, 현웅님 얼굴, 현민님 얼굴도 같이 그리기를 하면, 아마 다른 에너지 필드를 가진 뉴럴넷을 생성할 것입니다. 한 입력과 특정 출력이 나머지 두 사람보다 훨씬 더 강하게 각인되었다 라고 한다면.. 그 사람의 경우 더 또렷하게 구분하고, 더 잘 그릴 수 있게 되겠죠... 이 말은 무슨 뜻이냐면, 내가 누군가를 사랑하면 더 잘 기억나고 더 잘 그릴 수 있다.. 이런 의미인데요. general한 응용에서는 그렇게 한 쪽에 치중되면 local optima에 빠진 것으로 볼 수 있구요.. 그러므로, 일종의 평균치를 내어서 어떤 특정 영상에만 치중된 모델이 안나오게 하는 게 관건이겠네요. 그래서, 제 입장에서 입력은 아주 깨끗한 X라고 하지만.. 출력 X'는 다른 사람의 영상이 노이즈로 작용해 약간은 더러워진.. 말하자면, 누구나 다 가지고 있는 공통된 것은 (가령 바깥 얼굴 윤곽선, 눈, 코, 입, 귀의 대략저인 위치) 강한 신호을 가지고, 그런 공통된 부분으로부터 delta 값이 noise 처럼 보이는 영상이 출력의 의미였습니다.

    이제 구현자 관점에서 조언드리면, 전체 데이터셋을 읽어서 평균을 내는 것보다.. 어차피 사람의 얼굴에서의 특징은 대략 1000명 정도의 샘플만을 가지고 평균을 내어도 어렴풋이 노이즈 섞이고, 중요한 피처는 뽑힌 '조합 얼굴'이 될 것이고.. 이것을 출력으로 두고 unsupervised learning을 수행하면 될 것 같습니다.
    답글

  • 장현웅 2014.12.13 06:43

    아~ 감사합니다~!!!
    설명을 정말 잘 해주시는거 같아요~! 이해가 쏙쏙
    제가 저의 상황을 제대로 알려드리지 못해서 답변쓰시는데 애매하셨을 거라는 생각이 지금 듭니다..ㅠㅜ 죄송합니다.

    그래도 필요한 내용을 많이 알아가는거 같습니다. 감사합니다.
    general 응요에서 한쪽에 너무 치중되는것도 고려해야 하겠군요~!

    참고로 저는 이미지를 분류하려고 하고 있습니다.
    정형화 되어있지 않은 여러 이미지(약 5개 클래스 당 1000개 이미지 아마 트레이닝 이미지겠죠)를 가져와서 자율학습 시킨후에 테스트 해보려 하고 있습니다.

    많이 배워갑니다. 바쁘신 와중에도 답변 감사합니다.
    답글