데이터 지능 E2 기계학습 실무 (생방송 / 무편집)

Jin Young Kim, Kim Seunghyun, and Hyeri discuss deploying machine learning in production. They cover regression testing with fixed data, monitoring for data distribution shifts, and the friction of moving Python research code into Java or C++ environments. Manual testing and expert review remain essential because fully automated solutions are rare.
Chapters
네 데이터 진행 팟캐스트 두번째 시간 기계학습편 이제 시작을 해볼까 합니다 이번에는 야끈차게 유튜브 라이브를 준비했는데 한번도 안오신 것 같네요 일부러 어떻게 사고날까 싶어가지고 광고를 열심히 안했는데 혹시 방송에 보이시는 분 있나요?
네 저 지금 있는데 트루워칭 나오니까 뭐
저희 셋이 보고 있어요
원래 환경에도 있죠 시작은 어떻더라도 끝이 어떠면 된다
이런 말인데 잘 되는 사람 처음부터 잘 되더라고요
아 그렇게 팩폭 하시면 안 되죠
팩폭 저는 이 셀렉션 바이오스를 좀 가져올립니다.
네.
제가 하고 싶은 것만 생각하고 싶은 것만 생각하기. 아무튼 뭐 지난번에 굉장히 편하게 방송을 마쳤는데 너무 편하게 하고 싶은 얘기만 하고 끝냈나 생각이 좀 들고 해서 이번에는 이제 본인에 충실하게 기계학습이라는 테마를 잡아서 구글 리서치의 김승현님 예전에 그 나는 프로그래머다 사이 채널에서 데이터 지능 그 말씀을 나눈적이 데이터 그러니까 기계학습 관련해서 말씀을 나눈적이 있었는데 최근에 또 책 출간도 하시고 여러가지 또 좀 더 깊은 이야기를 나눠봐도 좋을 것 같아서 다시 한번 모셨구요 그리고 태리님 저희 게스트 같은 호스트?
네,
우선은 저는 근황이라면 최근에 육아휴직 5주간의 육아휴직을 끝내고 복직을 해서 정신없는 나날을 보내고 있고요 와이프도 이제 일을 시작을 해서 정말 일하는 부부의 육아가 이런 거구나 하면서 지내고 있습니다 혜리님은 잘 지냈어요?
네, 저는 똑같습니다. 쪼일 때 연구하고요. 안 쪼일 때 딴짓하고 평소와 같습니다. 승현님은 잘 지내시는지?
저야 그냥 회사 다니니까 회사원 생활하고 있고요. 별다른 거라고 하면 처음에는 머신러닝 1세가 2000부 정도 되거든요. 많이 팔려가지고 2세 순세하게 됐습니다 감사합니다 성원에 그리고 네 저는 이제 이쪽에 마운틴뷰 오피스에 있다가 11월 달에 구글 뉴욕으로 옮겨갈 거예요 근데 하는 일은 비슷하고요 그냥 일단은 그쪽에 뉴욕에서 일할 일이 좀 있어가지고 그렇게 가게 됐습니다
팀이 다 옮기는 건 아니고 이제 그쪽 팀 쪽으로 이제 필요한 일이 있어서 개인으로 옮기시는 거예요?
네네네 그리고 저희 팀도 뉴욕에 원래 좀 있거든요. 그래가지고 그렇게 뉴욕에 있는 사람들이랑 좀 일하고 뭐 그럴 것 같습니다.
이제 뉴욕커가 되시는 거예요?
네 뭐 그렇긴 하죠. 뭐 별거 없겠지만 네.
혹시 그 머신러닝 뭐 이런거 막 책 판매 댓글 이런거 많이 읽어보셨을 거잖아요. 댓글들이 어떻던가요?
평가들이.
지금 출판한 지가 그렇게 오래 안 돼가지고요. 10월 1일 날 나왔거든요. 그래서 댓글이 많이 넘는데 사람들이 어떤 분들은 생각보다 읽기 쉬워서 괜찮다 그러신 분들이 좀 있었습니다. 근데 그거 외에는 댓글이 없어서 댓글 좀 부탁드릴게요. 어떻게 생각하시는지를 알기가 좀 쉽지가 않아가지고.
아직 책 이름을 말씀 안 하셨는데요?
책 제목은 처음 배우는 머신러닝입니다. 한비출판사에서 나왔고요. 저와 저의 선배님이랑 같이 정영준님이랑 함께 공조해서 작성했습니다. 네.
혹시 생각보다 쉽다는 분이 머신러닝 전공하신 분 아니죠? 개그가 안 되네요.
네. 조금 끊겨서 들렸는데요.
아, 아니요. 이거는 제가 그냥 편집을...
너무 개그 같은 거 제가 담당할 테니까 너무 신내지 마시고 저한테 맡겨두세요.
네, 어쨌든 지난번에 저희가 이제 다들 일하는 분들이 하는 방송이니까 아마추어 직업이 따로 있는 분들이 하는 방송이라서 아마추어 정신을 가지고 저희가 즐거운 마음으로 할 수 있는 만큼 열심히 하고 너무 잘하려고 하지 말자 이런 식으로 말씀을 드렸는데 그렇게 첫 방송 녹음을 하니까 두 번째 방송도 참 기다리는데 별 부담이 안 되고 마음이 참 편하더라고요 그래서 오늘도 게스트 분들과 또 이번에 두 번째니까 즐거운 마음으로 녹음을 하고 다음에 혹시나 이제 부족한 점이 있으면 피드백을 받아서 개선해 나가도록 하겠습니다 어쨌든 기계학습 지난번에 사실 그 기계학습의 현재와 미래 연구 동향부터 이제 그 업계 동향까지 좀 두루두루 알아봤었는데 뭐 여전히 가장 기계학습 쪽에서 이제 가장 이제 AI 이런 얘기를 하면 가장 문제가 되는 게 문제라기보다는 너무 매직이다. 조만간에 인간이 하는 일을 다 AI가 대체한다. 이런 식으로 아직도 얘기가 되고 있는데 그런 생각이 물론 일관의 진실일 수도 있고요. 환상일 수도 있는 것 같은데 현실감각을 기르는 측면에서는 기계학습을 들었다면 오늘 당장 실무에 활용하려면 어떻게 해야 되나 그런 이야기를 나눠보는 게 가장 좋을 것 같아서 오늘은 조금 기계학습을 실무에 활용하는 전 단계에 걸쳐가지고 한번 고려사항이 될 수도 있고 팁이 될 수도 있고 그런 얘기를 한번 해보려고 해요 저는 특히 제가 주로 회사에서 해온 일이 검색이 됐든 기계학습 모델이 됐든 모델을 만들어서 어떤 분들이 결과를 받고 오시면 저는 그걸 분석하고 평가하고 비평하는 일을 하기 때문에 사실은 실물을 활용한다는 측면에서는 굉장히 저도 할 얘기가 많은데 승연님은 회사에서 기계학습 쪽 일을 하시는데 어떤 일을 주로 하시는 거죠? 시작하기 전에 그런 백그라운드를 좀 더 다시 들으면 좋을 것 같아요
네 저는 현재 구글 리서치에서 세레브라라는 팀이 있는데요 그 팀은 모바일 환경에서 머신러닝을 어떻게 하면 좋을지 그런거에 대한 고민들을 여러가지 하고 제품에도 실제로 새로운 머신러닝 기법들도 적용하고 이제 그거를 구현하고 뭐 테스트하고 디버그하고 네 그런 조직이 있습니다 굉장히 어떻게 보면은 연구랑 프로덕션이랑 같이 하는 그런 분야인데요 특히 저희가 최근에 많이 밀고 있는 것은 feathered learning이라고 그게 뭐냐면 모바일 환경에서 사용자의 데이터들을 클라우드로 다 보내지 않고 사용자의 데이터를 안전하게 프라이버시에서 안전하게 학습을 한 다음에 그걸 영리하게 조합하는 방식으로 전체적인 되게 지능적인 서비스를 제공할 수 있는 그런걸 하고 있는데요 결국에는 모바일 환경에서 이런걸 구현을 하고 하다보니까 머신러닝, 모델링적인 문제도 되게 중요하지만 실제로는 이게 아무래도 시스템 문제를 푸는게 굉장히 많이 있어요 그래서 뭐, 배터리를 너무 많이 쓰면 안된다던지 네트워크를 낭비하면 안된다던지 아니면 어떻게 하면 사용자 데이터를 잘 보존할 수 있는다던지 그 다음에 그렇게 하면서도 모델 자체가 사용자한테 가치를 줘야 되니까 그걸 어떻게 한다든지 그런 거를 다 고민하면서 풀어나가고 있습니다 그래서 굉장히 실제로 머신러닝을 실무에서 사용하게 되면 모델링도 중요한데 엔지니어링이 굉장히 중요해요 이게 현실적인 문제를 풀기 위해서는 뭔가 무제한의 데이터와 무제한의 리소스를 가지고 할 수가 없잖아요 그래서 그런 것들이 되게 복잡해서 그런 고민들을 많이 하고 있습니다 특히 한 가지만 더 강조하자면 테스트를 잘 하는 게 굉장히 중요하거든요 한 번 이제 연구에서는 돌리고 나서 그게 끝나면 아 이제 결과 잘 나왔네 이런 건데 사용자들이 실제로 사용하는 기기들을 그냥 막 망가뜨릴 수는 없잖아요 그러니까 가능하면 이제 잘 테스트해서 그 다음에 앞으로도 발전을 할 때 새로운 기능을 추가할 때 이제 잘못되지 않도록 그런 테스트가 굉장히 중요합니다
저 질문 있는데요 그러면 머신러닝 연산들이 대부분 모바일에서 이루어지는 거죠?
네 그렇죠 모바일에서 학습이 이루어지고요 그 다음에 이게 어떤 식으로 동작하냐면 모델들을 학습을 해서 데이터를 올리지 않고 모델의 델타 업데이트를 올리거든요 서버에 그럼 서버에서 그걸 또 합쳐요 합치면 실제로 그 델타 업데이트는 그냥 로우 데이터가 올라가는 게 아니고 어느 정도 약간 그걸로 사용자가 어떤 사용 패턴을 가지고 있는지 알 수 없도록 변화돼서 올라가거든요. 그래서 그렇게 해서 합치는 거를 서버에서도 하게 되고요. 그래서 서버에서도 연산이 있고 데이터가 있는 디바이스에서도 연산이 있고요. 그다음에 그게 왔다 갔다 하면서 물론 사용자가 배터리에 문제가 없도록 되어 있어요. 그런 식으로 해서 학습이 둘 다 일어나게 됩니다.
아 그러니까 뭔가 모바일에서 1차적인 머신러닝 영역을 갖고 거기에 있는 모델의 반응들이나 이런 연산물을 통해서 그걸 서버에서 가볍게 2차적으로 뭔가 다시 교환을 하고 이런 식인가요?
네 맞습니다.
그러면은 승현님은 그 알고리즘 쪽도 있고 사실 이거를 가지고 실제 돌아가는 시스템을 만들어서 사용자들한테 배포하는 정말 프로덕션이란 프로덕션이고 실제 실무적인 일도 있는데 그 두 가지를 다 하신다는 거죠?
네, 완전히 그거를 하나를 떼놓고 할 수가 없고요. 문제 자체가 굉장히 새롭고 이제 한쪽이 되면 한쪽이 되는 거고 안 되면 또 안 되는 거고 이렇게 돼가지고 이제 이것저것 다 건드리면서 하게 됩니다. 근데 실제로 모델링은 생각보다 굉장히 복잡하게 하기가 힘들어요. 왜냐면 데이터의 양도 있고 이제 클라이언트가 디바이스에서 한계도 있고 여러가지 되게 현실적인 문제가 많기 때문에 그래서 시간으로 따지면 디버깅하는 거나 테스트 같은 게 많으니까 시간으로 따지면 엔지니어링에 더 많은 시간을 쏘고 있죠.
네, 아무튼 오늘 기계학습의 실무라는 주제로 말씀을 나누기 굉장히 좋은 그런 일이 아닌가 생각이 드네요. 혜리님은 지난번에 기계학습계의 남인이라고 소개를 하셨었는데 기계학습 실무에 대해서 어떤 말씀을 해주실 수 있을까요?
저는 아직은 회사 생활을 했죠 박사 오기 전에 회사 생활을 했으니까 아직은 기계학습을 신물을 적용하는 걸 잘 아는 단계는 아니지만요 프로젝트는 아주 싼 노동력으로 하고 있으니까요 박사과정생으로서 그러고 보면은 저같은 경우는 대부분의 일들이 데이터에서 제너럴라이저블한 일반화 가능한 지식을 뽑아내는데 그게 일반화된 지식이 무엇일까를 아는 것에 가장 중요하게 다루고 있는 것 같아요 그래서 보통 하시는 분들 보면 이러잖아요 커블리 데이터 받아서 여러가지 모델들을 돌려보고 하이퍼 파라미터 조정해보고 이게 제일 잘된다 이게 95% 찍었다 그러면 얘가 최선이다 라고 얘기를 하는데 사실은 그게 최선일지 그게 다른 데이터에서 최선일지는 아무도 모르는 거잖아요 그런데 그런 식으로 제한된 정보와 제한된 데이터를 가지고 과연 내가 여기서 학습할 수 있는 최선이 무엇인가 과연 어 제너럴라이저블한 날리지는 어떤 것인가 이런 거에 대해서 계속 데이터랑 대화를 깊은 대화를 밤새도록 나누고 있어서요 네 그런 걸 하고 있다고 말씀드립니다
네 체리님은 아무래도 그 함께 계시니까 좀 더 그런 쪽 연구 쪽 얘기를 좀 더 해주실 수 있을 것 같고 나중에 그 실무적인 일을 해보고 싶은 생각도 있으신 거죠?
아 그럼요 돈 벌어야죠
네 아무튼 뭐 굉장히 그 저도 이야기를 항상 나누고 싶은 초대였는데 기계학습의 어떻게 기계학습 정말 멋진데 실제로 이게 잘 될까 잘 되게 하려면 어떻게 해야 될까 어떤 문제가 있고 뭘 어떻게 해결해야 될까 그런 얘기를 이제 본격적으로 해볼 건데요 들어가기 전에 사실 이런 얘기를 너무 뜬구름 잡는 적이 될 것 같아서 제가 아주 간단한 시나리오를 하나 가지고 이야기를 한번 풀어볼까 해요 이거는 뭐 물론 꼭 모든 상태에 적용할 수는 없겠지만 그래도 이제 상황을 한번 가정을 해보고 이걸 가지고 이제 한번 교육학습으로 이제 이 문제를 푸는데 어떻게 해야 될까 그런 식으로 한번 생각을 하면 좋을 것 같아서요 제가 생각을 한 것은 저희가 굉장히 흔한게 전자상거래 아마존이 될 수도 있고 이제 저희가 만약에 데이터진흥이니까 대지닷컴이라는 온라인 나중에 강의 사이트를 연다 굉장히 다양한 종류의 강의를 올려서 이걸 가지고 돈을 버는 그런 종류의 사이트가 된다 이렇게 됐을 때 저희가 이제 뭐 거기에 이제 구매 이력도 있을 거고요 그 다음에 이제 온라인이니까 온라인 사용자 웹 로그 데이터도 있을 거고 이제 그런 경우에 어떻게 이 데이터를 사용해서 예를 들어 판매량을 높일 수 있을까 이런 종류의 이제 문제가 있다고 생각을 하고 한번 이걸 어떻게 문제를 해결할 수 있을까 그런 얘기를 한번 이거를 바탕으로 해서 나중에 얘기를 해봐도 좋을 것 같아요 그래서 우선은 문제 정의가 사실 필요한데 문제 정의라고 하면 우선은 기계학습 어떤 종류의 문제가 있다고 가정하는 거죠 예를 들어서 제가 온라인 강의 말씀을 드렸는데 당연히 판매량을 높이고 싶겠죠 그러면 이제 흔히 생각할 수 있는게 어떤 강의를 추천을 한다 사용자에게 사용자가 원하는 강의를 추천을 해서 추천 결과를 홈페이지에 띄울 수도 있고 이메일로 보낼 수도 있고 그런 문제가 있다고 쳐요 그러면 이제 이 문제를 과연 머신러닝으로 해야 되는가 머신러닝으로 하지 않고 뭐 사람이 하는 방법도 있죠 사람이 하는 그냥 수동으로 하는 방법이 있고 그 다음에 이제 머신러닝 돌리는 방법인데 이걸 어떻게 해야 되나 이런 문제가 있다고 했을 때 어... 태리님은 어떻게 할 것 같아요? 이걸 머신러닝 할 것 같아요? 아니면은 뭐 어떻게 할 것 같아요?
저 같은 경우는 일단은 최대한 블랙박스를 줄이는 방법을 선호를 하거든요 그래서 요즘에는 엔드투엔드, 원샷 이런거 다 유행하지만 로우인풋을 넣었을 때 가장 좋은 대답을 주면 가장 좋겠지만 사실은 그렇게 좋은 결과가 나온다고 한들 거기에 대한 제대로 된 이해가 없으면 다른 상품을 개발할 때 또 아무런 지식이 없어지거든요
근데 여기서 블랙박스를 하면 이미 머신러닝을 쓴다는 가정은?
제가 말씀드린 것 처럼 휴리스틱을 얼만큼 쓰고 머신러닝을 얼만큼 쓰고 포션으로 봤을 때 전체 다 머신러닝을 써서 블랙박스로 취급할 수도 있고 머신러닝이 다 블랙박스는 아니지만 그리고 또 휴리스틱으로 본인만의 디지털 트리 만들어서 할 수도 있잖아요 근데 이제 그런 경우에 있어서 저 같은 경우는 최대한 내가 할 수 있는 퓨리스틱을 써가지고 최대한 만들어봐서 데이터에 대한 어떤 정도의 감을 잡고 그 정도의 뼈대가 있을 때 여기에다가 이제 이러한 방향성으로 머신러닝을 제공하면 이거보다 조금 더 성능이 좋겠구나라는 식으로 접근을 하는 방법을 선호를 하거든요 그래서 좀 최대한 인터프리터빌리티가 살아있는 쪽으로
방법을
잡는 쪽으로 저는 이렇게 보통 선호를 합니다.
요약을...
네 말씀하시죠.
잠깐 제가 요약을 하면은 혜용님은 우선은 어떤 규칙을 가지고 휴리스틱이라고 하셨는데 그냥 임의의 규칙을 가지고 예를 들어 지난달에 가장 많이 팔린 상품 10개를 가지고 추천을 한다 이런 식으로 이제 먼저 접근을 해보시고 그 다음에 이제 그거를 슬슬 머신러닝을 나중에 고민을 해본다 어쨌든 머신러닝이 가장 우선된 고려사항은 아니다 이렇게 말씀하시는 거죠
네 그렇죠 일단은 먼저 팩터를 보고 재방문율이 가장 중요한가 상품과의 연관성이 중요한가 이런 것들을 먼저 다 보고 컴비네이션도 보고 뭐 이런 식으로 사람이 쫓아갈 수 있는 한 최대한 많이 쫓아간 다음에 그러한 감각을 가진 상태에서 머신러닝들을 하나씩 대체해 나가는 거죠 휴리스틱을 맞이해서
네.
그 반대 방법도 하긴 합니다. 머신러니가 딱 던져놓고 그걸 해석함으로써 뭐가 중요한지 리버스 엔지니어링도 하거든요. 두 가지 저는 다 하는 것 같아요.
근데 그 두 가지를 두 번째 거를 하려면 이미 데이터가 있다는 가정하에서 하는 거죠?
네, 그렇죠. 데이터가 있다는 가정하에서.
네.
그렇죠.
네, 근데 뭐 이게 이정도 레벨에서 머신러닝을 사용할지 말지 정도로 결정하는데 정도가 되면 기술적인 문제나 어떻게 문제를 풀어야 될지 보다는 머신러닝을 왜 써야 되는지를 먼저 대답을 하고 하시는 게 좋을 것 같다는 생각이거든요 그래서 혜리님이 말씀해주신 거나 진영님이 말씀해주신 게 다 좋긴 한데 머신러닝이라는 게 사실 어떤 특정한 경우에 잘 동적하는 툴 같은 거잖아요 그러니까 이게 머신러닝을 할 때 뭐 대용량의 데이터를 처리를 한다 근데 한번 처리해가지고 결과를 딱 내놓는다 그러면 실제로는 머신러닝을 쓸 필요가 없죠 이건 그냥 데이터 처리니까 그죠 근데 이게 뭐 데이터를 처리한 다음에 그걸 바탕으로 앞으로 미래에 계속 예측을 해야 된다 그러면 좀 필요할 수가 있겠죠 그 다음에 테리님이 말씀하신 것처럼 그 예측이 어떤 정도의 이제 사람이 이해할 수 있어야 된다 그러면 그거에 해당하는 게 또 필요하겠지만 또 반대로 이제 그게 너무 많이 필요해 가지고 머신러닝이 나오는 결과를 사람이 바로 쓸 수가 없고 뭐 그냥 어느 정도 머신러닝이 주는 대답을 대답에 대한 신뢰도를 극한으로 가져가지 않으면 힘들다. 예를 들어서 의사가 결정을 내리는데 머신러닝을 쓸 수 있죠. 근데 뭐 이게 결정을 근데 머신러닝 내리기는 지금 어려운 상황이잖아요. 그렇죠? 아무래도 환자의 책임이라든지 그런 게 있으니까 이 정도 레벨이 되면은 이게 거의 비즈니스적인 어떤 이게 왜 필요하고 과연 이걸 썼을 때 얼마나 가치가 있고 이거 대신에 사람 썼을 때보다 얼만큼 코스트가 절감되고 이런 게 나와야지 약간 좀 정확하게 정의가 될 것 같습니다
네 지금 사실 시나리오가 아주 명확하게 있는 건 아니니까 저희가 뭐 이렇게 하세요 저렇게 하세요 말씀을 드릴 수 있는 건 아닌데 저는 이제 머신 러닝을 어떻게 써야 될지 고민하기에 앞서서 머신러닝을 과연 써야 하는가 이 고민을 먼저 해보시는 단계가 필요하다 그런 정도를 일단 말씀드리고 시작하면 어떨까 생각을 했고요 그리고 이제 머신러닝이 그냥 한번 돌리고 끝나는 그런 걸로 아까 이제 테리님이 말씀하셨듯이 그냥 연구할 때는 한번 알고리즘 돌리고 딱 끝나잖아요 그래서 이제 결과가 나오면 그 결과를 어떻게 사용하면 되는데 실제로 돌아가는 시스템을 만들 때는 머신러닝이라는게 일단 구현을 해놓은 다음에 그거를 이제 아까 승현님이 말씀하셨지만 잘 돌아가는지 테스트도 해야되고 그리고 그게 한번만 잘 돌아가도 되는 것도 아니고 계속 잘 돌아가야 되는데 그러려면 인풋이 되는 어떤 데이터가 항상 머신러닝 알고리즘을 구현할 때의 여러가지 속성을 계속 가지고 있어야 되고 데이터를 알고리즘에 넣어주는 과정에 전혀 문제가 없어야 되고 그런 모든 게 굉장히 큰 부담이 된다는 거죠 모든 게 잘 돌아가야 되기 때문에 그래서 제가 최근에 읽은 최근은 아니지만은 그 논문 중에 머신러닝 이제 굉장히 큰 부채를 기술 부채라고 하는 개념이 있어요. 테크니컬 데트라고 기술 부채를 만드는 거다. 그런 그 논문을 사실은 실물 하는 사람들은 많이 아는 건데 이제 그걸 실제로 논문화 해가지고 잘 정리해놓은 게 있어서 기술 부채, 데트라고 해야 되나?
크레딧 카드, 카드 빚, 빚, 빚 저쪽에 이렇게 붙이는... 네, 알겠습니다
뭐, 어쨌든 그거는 아마 저기 회원님이 좀 더 하실 말씀이 있지 않을까요? 그래서 쓸까 말까 고민을 구분해서도 많이 하실 것 같은데 이제 그런 데 어떻게 뭐 한다 약간 이런게 있네
뭐 사실은 워낙 이제 상황에 따라서 다르기 때문에 근데 아까 말씀드린 것처럼 머신러닝이라는거가 이걸 한번 하고 딱 되고 끝난다 이런거는 실무에서는 별로 없거든요 그래서 지속적으로 사람의 인력과 그 다음에 사람들이 이제 그 제품 자체를 이제 메인터넌스를 하는 노력이 계속 들어가게 되는데요 데이터를 계속 얻는 것도 있지만 그러면 과연 그런 정도의 뭐 전통적인 어떻게 보면 소프트웨어를 한번 개발하고 짠 되는 것보다 더 많은 코스트가 들 수도 있어요. 그러니까 머신러닝을 하는 것 자체가 더 복잡한 시스템을 결국 만들게 되잖아요. 그러면 과연 그렇게 복잡한 시스템을 사용하고 그 다음에 앞으로 유지보수도 계속되고 그 다음에 그 사람들이 거기 영원히 있을 것도 아니니까 머신러닝 좀 아는 사람들이 계속 뽑아야 되고 하는데 과연 그게 지금 하는 어떤 사업이, 현재 머신러닝을 도입하려고 하는 어떤 사업이 얼마나 가치가 있는가. 이런 문제가 굉장히 중요하죠. 그래서 사실 머신러닝이 모든 거를 매직컬하게 해결한다기 보다는 어떤 하나의 고급 툴 같은 거로 생각을 하시고 그 툴이 얼마나 유용한지를 평가하셔서 그다음에 도입을 시도하시는 게 좋을 것 같습니다.
어 진짜 굉장히 재밌는 포인트인 것 같아요 저 같은 경우에는 이제 학교 쪽에 밖에 안 있어 봐서 그런 부분을 잘 몰랐는데 어 머신러닝도 어떤 비용적인 걸 고려해서 가격 경쟁력 있는 쪽으로 선택을 하셔야 됩니다 어차피 다 비즈니스의 한 파트입니다 되게 좋은 즐거운 재밌는 접근인 것 같아요
네 그렇죠 예를 들어서 그냥 예제를 그냥 간단히 들자면 머신러닝을 요즘에 뭐 칩 같은 거에 불량률을 줄이기 위해서 사용할 때가 있잖아요 불량률을 줄인다기 보다는 불량인 애를 찾아내기 위해서 그럼 이제 칩을 칩이 이렇게 지나가면 그걸 사진을 찍는단 말이죠 사진을 찍어가지고 그 사진에 대해서 이제 이게 불량인지 아닌지를 분별을 한단 말이에요 그럼 분별을 한 다음에 그거를 그냥 바로 버릴 수 없으니까 사람이 이제 검증을 하겠죠 근데 옛날에는 그거를 그 시스템이 없이 100명이서 작업을 했다면은 지금은 그렇게 분별을 한번 하고 그 다음에 그 사람들이 하면은 한 70명을 줄일 수 있다고 쳐요 30명만의 임금이라고 치면 그럼 70명을 고용하는 대신 100명 대신에 30명을 고용하는 거니까 70만큼의 임금이 있겠죠 그럼 그거만큼 가치가 얘가 있어야지 실제로 도입하는 게 의미가 있지 만약 도입하는 것 자체가 진짜 비싸다 그리고 앞으로 로얄티도 계속 내야 된다 그러면 사실상 그게 회사로서는 도입할 이유가 별로 없는 거죠 그게 성능이 아무리 좋다고 해도 네 그
좋은 포인트도 나왔는데 사실 머신러닝 결과를 그대로 그냥 무조건 쓸 수도 있지만 말씀하신 대로 그 일단 머신러닝에서 결과를 뽑아보고 사람이 한 번 더 보면은 사람이 일을 훨씬 줄일 수 있다. 그런 식으로 사람과 기계가 약간 협업하는 그런 모델도 이제 가능하다는 생각이 들고요. 아까 제가 상품 추천 말씀을 드렸는데 상품 추천을 무조건 기계로 하면은 사실 잘 안 될 수 있잖아요. 상품 추천이라는 게 간단한 게 아니고 무슨 계절이나 이런 것도 우리가 해야 되고 여러 가지 상황이 있기 때문에 그런 경우에 기계가 한번 일단 리스트를 만들고 그걸 갖다가 사람이 다시 한 번 보면 훨씬 더 나은 물감물이 나오지 않을까 그러다가 이제 데이터가 쌓이면 이제 점점 기계가 사람의 일을 좀 더 대체할 수도 있는 거고 어쨌든 그런 가능한 활용법이 있다는 거 기계학습에 대한 만능으로 묻지마가 아니라 유용한 도구의 하나로 생각을 하면 좋은 결과가 나오지 않을까
요즘에 머신비전 쪽은 이미 예를 들어서 공항 검색대에서 이렇게 위험한 물건 판매를 하는거나 아니면 의료 영상에서 병이 있을 것 같은 부분을 하이라이트 시킨다거나 이런 거가 벌써 산업화가 많이 된 것 같아요
네 저도 최근에 알았는데 그 쇼핑 카트가 상품을 인식해가지고 어떤 그 계산대에서 여러가지 이제 어떤 이 상품을 누가 샀나 약간 이런 종류의 이제 그런 작업을 자동화 해주는 그런 AI도 이제 나오는 것 같더라구요. 그런 식으로 그게 완벽하지는 않겠지만은 적어도 이제 한 80% 결과를 만들 수 있으면 이제 가치는 있고 그런게 계속 좋아지니까 이제 점점 더 믿을만해지는 약간 그런게 아닌가 생각이 듭니다. 네 그래서 지금까지 문제를 정의하는, 정의한다기보다 기계학습을 도입할 것인가 그런 고민을 한번 해봤는데요. 그럼 일단 도입한다고 치고 데이터를 모아야 되는데 데이터를 모으는데 어떤 데이터를 모을까 이런 문제도 있고 데이터를 얼마나 모아야 되나 뭐 이런 문제도 있고 여기에도 굉장히 뭐 할 얘기가 많을 것 같은데 저 질문이 있어요
보통 회사 같은 데서 데이터를 쓰실 때 누군가가 이미 모아둔 데이터를 가지고 자 여기 데이터가 있으니 한번 뭔가를 알아봐라 이렇게 하나요? 아니면 엔지니어가 이런 데이터들을 피처들을 중심으로 모아주십시오 이렇게 얘기를 하나요?
일단 제가 답변을 드리면 다 있어요. 데이터가 모아진 경우도 있고 그 다음에 저희가 모아야 되는 경우도 있는데 데이터가 모아진 경우는 사실 많은 경우에는 이미 돌아가는 시스템, 예를 들어 웹사이트가 있어가지고 예를 들어 검색엔진이 웹사이트죠. 검색엔진이 있어서 검색엔진에서 사용자들이 이렇게 검색한 결과가 막 쌓여있는 경우 그런 부분은 걷다가 쓰면 되죠. 근데 그게 사실은 그렇게 간단한 일이 아닌 게 대부분 데이터가 갖다가 쓰기 딱 좋은 형태로 되어있진 않아요. 그러니까 보통은 뭐가 빠진 경우도 있고 그 다음에 굉장히 복잡한 가공을 해야 되는 경우도 있고 그래서 대부분은 데이터를 갖다가 쓰려고 하다가 결국에는 내가 처음부터 다시 모으지 하는 경우도 굉장히 많고 어쨌든 이게 굉장히 시간이 많이 들어가는 그런 일입니다. 희열님은 어떠세요?
데이터... 그쵸, 그런 식으로 어떤 특정한 데이터를 모아달라고 하는 경우도 있지만 사실 기업에서는 그런 경우가 많이 있죠 근데 그게 어떤 데이터가 필요한지는 사실 조금 두 가지를 나눠서 생각해야 되는데 데이터의 종류가 두 가지가 많이 있거든요 그래서 그거를 말씀드리자면 하나는 전체적인 머신러닝 시스템 아니면 머신러닝 모델을 학습할 때 필요한 데이터들이 많고요 그건 이제 머신 러닝의 모델들을 어떻게 하면 많은 데이터를 가지고 학습할 수 있는지 그 다음에 두 번째는 사실 두 개가 비슷하다고 볼 수 있지만 실제로는 좀 달라요 왜냐하면 평가용 데이터를 생각해 보면은 학습용 데이터보다 사실은 훨씬 더 잘 정리가 되고 잘 정리가 되어 있어야 되죠 한 가지 예를 드리면 평가용 데이터로 예를 들어서 아까 그 대지닷컴 온라인 강의라고 치면 온라인 강의에서 실제로 판매가 이루어진 거라든지 아니면 고객이 실제로 서베이를 통해서 작성한 코멘트나 아니면 작성한 점수 이런 거는 머신러닝 시스템을 평가하는데 많이 사용할 수 있죠 근데 물론 이런 데이터도 학습에 사용하면 좋지만 학습용 데이터는 그거 말고도 더 많이 쓸 수가 있어요 그냥 사용자가 예를 들어서 왔다갔다 하는 그런 액세스 데이터라든지 아니면 그런 걸 가지고 실제로는 머신러닝 모델을 더 많이 학습을 시킬 수가 있거든요 보통 평가용 데이터는 구하기가 좀 더 어려운 것을 평가용 데이터로 약간 되게 겸쟁하게 집중해서 많이 구하고요 그 다음에 학습용 데이터는 좀 더 구하기 쉬운 쪽을 사용해서 어떻게 하면 효율적으로 학습할 수 있는지 이거에 포커스를 많이 맞춰가지고 구하게 됩니다 아까 테리님이 말씀하신 것은 사실 둘 다에 해당할 수 있지만 조금 더 평가용 데이터에 집중된다고 볼 수도 있을 것 같아요
근데 그 좋은 포인트인 것 같아요 학습용 데이터는 조금 더 양이 양적으로 좀 더 많아야 되고 질적으로 좀 더 떨어질 수 있다 이렇게 말씀을 해주셨는데 근데 사실 통계학적 상식으로는 학습, 그러니까 머신러닝이라는게 결국에 학습용 데이터에서 패턴을 찾아서 이제 그거를 평가용 데이터에 적용하는 그런 과정인데 데이터의 특성이 그렇게 다르면은 학습용 데이터에서 어떤 종류의 편향 즉 바이오스가 들어가서 평가결과에 악영향을 끼치거나 단순하게 생각해보면 그런 결과가 나올 수 있지 않나요?
뭐 그렇게 하는데 사실 평가용 데이터에서 좋아야지 진짜 좋은거죠 학습용 데이터는 여러가지가 있지만 일단 머신러닝 시스템을 구현한다고 치면 보통 모델을 만들고 손실함수를 만들고 그 다음에 데이터로 학습을 하잖아요 근데 학습용 데이터는 결과적으로 보면 어떻게 하면 학습을 잘 할 수 있는가 어떻게 하면 많은 데이터를 사용할 수 있는가 그래서 이것 학습용 데이터 자체는 어떻게 보면 최적화를 문제를 푼다던지 그런 걸 정확하게 직접적으로 풀게 되는데요 이런 손실함수나 학습에 해당되는 어떤 매트릭들이 실제로 평가랑은 좀 다를 수가 있어요 예를 들어 학습용 데이터는 예를 들어 우리가 하는 게 크로스 엔트로피나 이런 거 많이 들어보셨을 텐데 그런 거를 최적화한다고 칩시다 근데 평가용 데이터는 실제로 사용자가 구매를 몇 번 했는지 이런 걸로 할 수가 있잖아요 근데 그렇게 해서 그 구매를 몇 번을 했는지를 학습용 데이터로 직접 풀게 되면 잘 안 풀리는 경우도 있어요 그러니까 평가랑 학습이 완전 동떨어져 있는 걸 보시는 것이 좋을 것 같아요 그래서 학습용 데이터를 이용해서 최선을 다하고 뭐 파라미터 튜닝이냐는 걸 다하고 그 다음 결과적으로 딴 해가지고 평가용 데이터를 가지고 평가함수를 가지고 이건 손실함수랑 다른거죠 평가함수를 가지고 얘가 실제로 비즈니스적으로 어떻게 잘 동작하는지를 찾게 되는거죠
진짜 재밌는 포인트인 것 같아요 그렇게 학습할 때의 loss function과 평가할 때의 evaluation function이 달라서 다를 수 있다고 이런거 되게 평소에 별로 생각하지 못했던 재밌는 포인트인 것 같구요 제가 요즘에 느끼는거는 왜 이렇게 만약에 아무 데이터까지는 아니고 약간 연관이 있지만 약간 바이어스가 있는 데이터들을 사용을 하면 오히려 결과에 악영향을 줄 수 있는데 왜 사용하느냐에 대해서 생각을 해보면은 요즘에 그런 트레이드 오프가 좀 있는 것 같아요 클린한 데이터를 쓰느냐 아니면 더티하지만 라지스케일 데이터를 쓰느냐 뭐 이런 두 가지의 선택지에서 저도 여러가지 고민을 하면서 다 해보거든요 데이터 클리닝을 해보고 그 다음에 뭔가를 해보기도 하고 혹은 그냥 약간 다른 태스크, 다른 데이터 컬렉션 이런 것도 하는데 요즘에 워낙 그 스케일러블한 메소드들이 잘 나와가지고 요즘에는 기왕이면 좀 더 덜티하더라도 라스트 데이터 쪽으로 선택하는 경향이 좀 더 커서 아까 진영님이 말씀하신 바이어스가 있으면 좀 안 좋지 않느냐를 약간 더 극복을 할 수 있는 것 같아요
아예 요새 보니까 그렇게 좀 더 띠하더라도 큰 빅데이터를 활용하는 아예 그 위클리 슈퍼바이스드 러닝인가? 그런식으로 또 논문이 나오고 하는 것 같더라구요 네 그쵸 결국에 실제 제가 아까 말씀드린 그 쇼핑카트, 그러니까 프로덕트 그 아이덴티파이하는 그러니까 프로덕트 이 제품이 어떤 제품인지 이제 그림 보고 알아맞추는 그런 문제에서도 처음에 이미지넷 같은 거를 많이 썼는데 이미지넷은 굉장히 잘 정제된 데이터잖아요 근데 이제 그 최근에 나온 회사들은 그거를 웹페이지에서 그 상품에 어떤 상품이 들어간 웹페이지가 있으면 웹페이지에는 굉장히 여러가지 답답한게 많이 들어있는데 그걸 가지고 이제 트레이닝 데이터를 써서 상품을 결국에 알아맞추는 그런 문제를 풀고 있는데 이미지 넷만 쓴 것보다 훨씬 더 결과가 잘 나온다고 그러더라고요 그래서 물론 조심할 건 많지만 이렇게 데이터 클린 데이터를 얻기 참 어렵기 때문에 그 한계를 극복하는 방법도 계속 연구가 되고 있지 않나 생각이 됩니다 데이터를 얼마나 모아야 되냐 이것도 사실 또 중요한 문제인데 제가 인터넷 돌아다니는 거 보니까 전 사실 이거를 써보진 않았는데 그 만약에 뭐 supervised learning 지도학습이라고 하죠 한국 한글로 그러니까 뭔가 분류나 이제 어떤 그런 문제를 품는 데 있어서 그 속성 즉 피처의 수에다가 10을 곱하면은 그 선형이 필요한 데이터 양이 나온다 이런 식으로 설명이 나온 데가 있더라구요. 학습에 사용한 속성이 10개면 데이터가 100권이 있으면 그걸 가지고 분류를 할 수 있다 뭐 이런 건데 뭐 이거 두 분은 동의하시나요? 이렇게 이런 식의 어떤 그것도 일종의 휴리스틱인데 이런 걸 사용해 보신 적 있으세요?
글쎄요 저는 딥러닝 쪽에서는 좀 어렵지 않나 생각을 하는데 왜냐면 피처가 워낙 많거든요 피처가 정말 많고 파라미터도 굉장히 많은데 그거를 이런 가이드라인으로 약간 알비트러리하게 사용하기가 조금 쉽지 않은 것 같아요 근데 선형 모델이라고 하면은 어느정도 정의가 될 수도 있겠네요 모델에 따라 다른데 모든 모델들의 이런 거를 사용하기보다는 그냥 일단 실제로 해봐야지 좀 정확하게 알 수 있지 않을까 생각합니다 양만이 아니고 데이터의 어떤 퀄리티나 품질도 되게 중요하잖아요 어떤 특정한 경우에 대해서 맞는지 적은지 노이즈가 많은지 적은지 이 자체가 데이터에서 학습 패턴 하는게 쉬운지 어려운지 이런 영향이 다 있어가지고 좀 어렵습니다 이렇게 말씀드리기 네
저도 좀 어렵다고 생각을 하는데요 저는 뭐 그런 거를 좀 해봐요 데이터의 양을 인위적으로 조작을 해서 적은 양부터 많은 양까지 이렇게 학습을 시켜보는 거예요 그러면은 적은 양에서 퍼포먼스가 좀 적게 나오고 혹은 일반 성능이 좀 적게 나오고 그러다가 훨씬 더 많이 사용하면 점점 퍼포먼스가 올라갈 거잖아요 근데 어느 정도 수준되면 그게 세트레이트 되는 부분이 있거든요 더 이상 데이터를 더 많이 넣더라도 방법적인 개선이 없으면 성능이 더 올라가지 않는 저는 딱 그런 식의 것으로 필요한 데이터 양을 좀 감을 잡지 이런 식의 피처 곱하기 10 같은 걸
생각을 해보지 않았던 것 같아요 네 저도 그래서 이거를 최근에 제가 이 방송 준비하면서 데이터가 얼마나 필요한지 기계학습에서 어떻게 할 수 있나 검색을 해보니까 이런게 나왔는데
질문들 진짜 많아요 이런거에 관해서 네 실제로
써본 사람이 별로 없는걸로 보면 어쨌든 근데
저는 기본적으로 뭘 잡고 있냐면 MNIST나 Cypher같은 경우는 클래스당 1000개씩 샘플이 있거든요 그래서 딱 그정도 클린데이터면 클래스당 1000개 이
정도를 생각하고 있어요 그쵸 근데 그거는 MNIST는 숫자를... 숫자 이미지를 거기서 인식하는 거니까 굉장히 특수한 문제죠 그쵸? 다른 종류의 문제에 적용되는 건 아니고 제가 최소한,
최소한 클래스다처럼 입력을 하면 최소한 MNIST 정도로 클린하고
그런 데이터도 첩리가 필요하다 클래스다 네 그 분야에서는 맞출 수 있겠네요 네 어쨌든 이거는 뭐 딱 정확히 얘기하기는 어렵고 테루님이 말씀하신 대로 사실 데이터 크기에 따라서 성능이 어떻게 변하는지를 분석을 해볼 수 있는 부분이기 때문에 그걸 가지고 이제 해보면 그런 식으로 이제 자기한테 맞는 사이즈를 찾는다 이렇게 생각을 하면 되겠네요 네 데이터가 준비하는 것도 그렇고 그걸 잘 가공하는 것도 참 중요한데 전처리라는 말도 있고요. 여기에서 어떤 고려사항이나 그런 게 있나요?
글쎄요. 데이터 전처리에 대해서는 사실 끝이 없죠. 데이터 전처리로 모든 걸 다 하고 그 다음에 아주 간단한 모델 사용해서 다 하고 이런 방법도 있긴 한데 데이터 전처리에서 제가 생각할 때 그냥 팁을 한 가지 드리자면 모든 데이터가 가능한 건 아니지만 약간 비주얼라이제이션을 해보면 좀 도움이 될 때가 있거든요 그래서 데이터를 아까 테리님이 데이터랑 이제 뭐 같이 주무신다고 했는데 그 말이 맞습니다 데이터를 그냥 딱 놓고 자 데이터가 있다 돌려보자 이게 아니고요 데이터가 있으면 얘가 데이터가 과연 어떻게 생겼는지 그 다음에 이 피쳐랑 이 피쳐가 얼마나 연관이 있고 그 다음에 실제로 이걸 공간에 펼쳤을 때 많이 툴들이 있잖아요 데이터가 다정한 공간에 있으면 그걸 티슨이나 이런식으로 디멘션 리덕션을 해가지고 비졸라이저 실험을 해본다던지 이런식으로 데이터를 좀 분석하는게 필요합니다. 그러다 보면은 얘를 어떻게 전처리하면 좋은지 그런걸 알게 되거든요 데이터가 한쪽에 치우쳐 있다던지 아니면 데이터가 어떨 때는 문자가 들어오고 어떨 때는 숫자가 들어오고 어떨 때는 0이고 마이너스 1이 갑자기 있고 뭐 엄청 그런 많은 일들이 있어요 그래서 그런 걸 잘 이해하는 게 중요하고 실무에서는 그게 뭐 테스트라든지 그런 것 때문에 더 많이 중요합니다
네 그리고 사실 데이터 전처리가 흔히 말하는 그 피처 엔지니어링이 열 전처리 포함된다고 할 수 있잖아요 속성 때 뭐 분류든 뭐든 어떤 그 작업에 사용되는, 나중에 테스트에 사용되는 다양한 속성을 뽑아내는 것도 사실은 옛날에는 굉장히 중요한 일이라고 얘기를 했었는데 최근에 딥러닝 이런게 나오면서는 조금 나중에 모델링 단계에서 풀어버리는 그런 추세인 것 같기도 한데요 근데 지금 저희가 방송하는 도중에 지금 어 라이브 스트림이 계속 올라가고 있어요 지금 질문도 올려주시고 여기서 지금 시청자가 엄청 많네요 8분 무려 8분 저희까지
8명 지금 제가 스탠드워치 들어올 줄 알았는데
8분 들어왔어요 네 근데 아까 윤수정님께서 어 피처를 어떤 변수가 가장 중요도를 가지는지 변수의 중요도를 평가하는데 오토 인코더를 활용해서 뽑아낼 수 있지 않느냐 이게 약간 지금 전처리랑 좀 관련된 것 같은데 뽑아낼 수 있나요? 일단 제가
먼저 말씀드리면요 일단 아까 말했던 것 잠깐 수정을 하자면 mlist는 클래스당 1000개가 아니라 5000개에서 6000개 정도가 있는데 저는 최저로 1000개 정도를 잡는다는 말씀을 먼저 수정을 드리고요. 일단 피처를 이제 콜렉션을 하면은 데이터를 콜렉션을 하면은 피처가 정말 여러가지가 있잖아요. 사람의 나이, 몸무게, 키, 암흑네스트 등등 여러가지가 있는데 이제 그걸 가지고 오토 엔코드를 쓴다는 얘기는 그것들에 웨이티드 섬을 한다는 얘기거든요. 그래서 웨이티드 섬을 하기 때문에 모든 요소가 어떻게 계속 웨이티드 섬, 웨이티드 섬 되가지고 다 얽혀 있어서 뭔가 성능을 가장 잘 내는, 이 컨스트랙션을 가장 잘하는 어떤 중간에 히든 어떤 피처들로 이제 나타나지겠죠. 요런 것들을 피처 익스트랙션이라고 해요. 기존의 모든 퓨처를 이용해서 그것들의 웨이티드섬으로 뭔가를 좋은 퓨처를 찾아낸다라는 거고 또 한편으로 퓨처 셀렉션이라는 게 있죠. 퓨처 셀렉션 같은 경우는 모든 퓨처를 다 이용하는 게 아니고 그 모든 퓨처 중에서 과연 어떤 퓨처들을 드랍할 수 있는가. 예를 들어서 제가 달리기의 속도에 대해서 지금 이야기를 하고 있는데 저의 출신 지역을 얘기한다거나 이런 퓨처는 전혀 상관없을 수가 있잖아요. 이런 퓨처들이 정말로 그 퓨처 셀렉션 방법들, 메소드들 많이 있거든요. 퓨처 바운드를 이용해서도 할 수 있고 그런 식의 것들을 이용해서 퓨처들을 드랍하는 퓨처 셀렉션 방법도 사용할 수가 있구요. 그래서 제가 말한 그 퓨처 셀렉션 같은 경우가 훨씬 더 심플하고 좀 인터프리터블한 것이기 때문에 가장 처음에 아예 상관없는 피처들을 날려버릴 때는 그런 것들을 사용하시는 것도 좋고 나중에는 말씀하신 대로 오토 엔코더라든지 아니면 다른 티스미 같은 비주얼라이제이션 방법들을 통해서 정말로 여기에 가장 기여하는게 좋은 퓨처, 성능을 제대로 내는 퓨처에 기여하는 그 히든 퓨처에 기여하는 그 로우 퓨처는 무엇인가를 역추적 해주는
방법도 좋은 것 같아요. 네, 다 주무시나요?
설명 잘 해주셔서 별로 뭐 엿붙일게 많이
없었습니다. 저는 한 가지만 딴 짓을 걸자면 달리기를 누가 잘하는지 판단하는 데 있어서 QCN 지역은 굉장히 중요한 것 같습니다 자메이카? 축구는 브라질? 어쨌든 데이터 준비가 사실은 예전에는 여기에 정말 온갖 흑마술이 다 들어갔었는데 그건 이제 선영 모델을 할 때 얘기였던 것 같고 최근에 앙상블, 딥러닝 이런 게 나오면서 모델 자체에서 이런 피처 간의 조합이나 이런 거를 찾고 그 다음에 피처 웨이트도 찾고 그런 거를 해주니까 그냥 정확하게, 정말 필요한 데이터가 정확하게 들어오는지만 할 수 있으면 되는 것 같아요. 근데 여기서도 보면 그것도 사실 쉬운 일이 아니거든요. 데이터가 내가 원하는 데이터가 정확히 모델로 들어가는지 그런 인프라를 잘 만들고 또 이거를 아까 승현님 강조하신 대로 테스트업을 하게 테스트를 계속 해가지고 이게 브레이크 했을 때 이제 그걸 바로 찾을 수 있고 그런 어떤 엔지니어링적인 그런 고민을 좀 하면 되는 부분이 아닌가
싶습니다 저는 어떤 분들이 머신러닝이 자동이다 이렇게 얘기하는지 모르겠는데요. 다 찍어봐야 돼요. 다 샘플을 한 땀 한 땀 다 찍어보고 정말로 어디에서 에러가 발생하고 어디가 지금 정말 다 하나 샘플도 찍어보고 비주얼라이저션 꼭 해봐야 되는 것
같아요. 그러다보면 이제 내가 손으로 그냥 하지 이런 생각을... 저는 심지어
제가 다루는 데이터가 얼마 안되거든요. 파킨슨병 데이터를 다루는데 샘플이 한 2,000개 정도밖에 안되요. 1,000개에서 2,000개 사이에요. 그래서 빡쳐가지고 막 이거를 내가 그냥 다 혼자 세보겠다. 그런 의미 같기도 해요.
그렇죠. 아 그 태용님 데이터가 팝핀스병 저도 그 의학 쪽 데이터 모으시는 것 같은데 좀 재밌는 것 같은데 좀 설명해 주실 수 있을까요? 데이터를 모으는데 어떤 고려사항이 있고 어떤
좀 이슈가 있고 그런지 일단 저는 제가 직접적으로 데이터 컬렉션에 참여는 안해서 데이터 컬렉션은 지금 독일에 있는 그 뮤넨 공대랑 또 션 클리닉이라는 대형 병원이 있어요 그래서 그쪽에서 이제 데이터를 파킨슨병 환자 27명으로부터 모았고 이제 그거를 이제 저희한테 제공을 해서 제가 이제 처리를 하고 프레딕션하고 이렇게 하고 있거든요 웨어러블 센서 데이터에요 데이터 컬렉션 과정에서 이제 중요한 건 뭐냐면은 보통 데이터 컬렉션하기 좋은 환경은 이런 데죠 병원이라든지 랩이라든지 이런 데서 컬렉션하기가 좋죠 근데 우리가 이제 실제로 이 오토매틱 디바이스가 활동하기 바라는 것은 홈에서 활동하기 바라잖아요 근데 이제 문제는 뭐냐면은 근데 저기 prediction가 하는
타스크가 이 환자가 파킨슨 병인지 아닌지를 진단하는 건가요? 아니면 어떤 종류의 타스크죠? 일단 모든 환자들은 파티킨슨병
환자구요 약을 먹으면 보통 파티킨슨병 환자가 잘 못 움직여서 딱딱하게 경직된 상태로 있거든요 약을 먹으면 그게 좀 좋아지는데 약을 너무 많이 먹거나 장기간 목욕을 하면 디스키니지아 라고 해서 자발적이지 못한 출렁거리는 움직임을 만들어요 그것의 정도를 보고 의사가 약을 적당량을 투약을 해줘야 하는데 그걸 보려면 의사가 15분 동안 앉아서 이 사람의 반응을 관찰해야 하니까 이걸 그냥 집에서 오토매틱하게 이벤트를 할 수 있는 걸 만들자 해서 지금 하고 있는 건데요. 그런데 문제는 뭐냐면 이런 뭐 슈퍼바이저 러닝을 하는게 쉬우니까 레이블을 해야 되는데 레이블을 병원에서 다 레이블을 하잖아요 그러면 이게 거의 무쓸모에요 그 집안에서는 사람들이 막 다른 활동들을 하잖아요 설거지도 하고 앉았다가 티비도 보고 근데 또 병원에서는 의사 앞에서 하는 아주 클린한 행동들이 있죠 그래서 데이터를 그런 이런 차이가 굉장히 저를 어렵게 만들고 졸업을 늦추고 있습니다 아까
얘기한 그 편향인거죠 그쵸? 네 그쵸
이런 편향들이 있어도 상관없다고 얘기했을때는 뭐냐면은 라지스케일로 갔을때는 상관이 없는데 저처럼 스몰스케일 가지고 이렇게 하려다 보니까 아 네 원망스럽습니다 세상이
뭐 라지스케일이라고 해도 편향은 문제가 될텐데 이제 워낙 복잡하니까 그 편향이 다 이제 서로 이렇게 캔슬하고 다니고 약간 그럴 데이터가
많으면 기본적으로 어느정도 중간에 보통의 behavior 쪽으로 이제 언제든
갈 수 있다고 믿고 있으니까요 네 그렇습니다 네 어쨌든 또 의학 쪽에 데이터를 어떻게 모으는지도 좀 말씀을 드렸고 어 네 그래서 지금 데이터가 일단 모였다고 치고 이제 알고리즘을 어떤 모델링 좀 얘기를 좀 해볼게요 어떤 알고리즘을 사용해야 되고 그 다음에 이제 실무에서는 알고리즘 하나가 아니라 여러가지를 조합해서 사용하기도 하는데 알고리즘을 모델링을 하는 데 있어서도 굉장히 다양한 고려사항이 있죠 알고리즘의 어떤 학습목표 혹은 손실함시라고도 할 수도 있고 학습목표를 어떻게 하고 어 알고리즘의 여러가지 그 파라메터 그 하이퍼 파라메터라고 하죠 어떻게 튜닝해야 되고 그 다음에 이제 결과가 나왔을 때 이걸 어떤 지표를 가지고 평가를 해야 되는지 여러가지 정말 다양한 얘기를 해볼 수가 있겠는데 어 저는 승현님한테 그거 질문하고 싶어요 아까
그 평가용 그 로스 펑션이랑 이빌레이션 펑션이랑 이제 학습할 때 다른 로스 펑션을 사용할 수 있다라고 말씀을 하셨는데 보통은 이제 같이 세팅을 해놓고 하는게 이제 우리가 공부할 때 배우는 거잖아요 근데 이벨루에이션 할 때 쓰는 로스 말고 트레이닝 할 때 로스를 할 때 거기다가 그게 이제 최종적으로 이벨루에이션 실제 성능에서 도움을 줄지 그런 것들을 어떻게 할 수 있는지 그래서 그런 로스를 어떻게 디자인 하시는지 이런게 좀 궁금해요 그
부분에 대해서는 그냥 한 번에 되는 건 없고요 정답이라는 건 없고요 예제를 약간 들면 이런 식이에요 예를 들어서 검색엔진에서 랭킹을 결정한다고 칩시다 어차피 진영님도 그쪽 검색엔진 쪽 많이 하셨으니까 그러면 검색엔진에서 랭킹을 할 때 뭐 랭킹 로스 이런 걸 쓸 수가 있겠죠 랭킹이 어떻게 되는지에 따라서 잘 되고 뭐 이런 것도 있겠지만 실제로 근데 비즈니스 로직을 생각해보잖아요 그러면 그 랭킹을 결정한 이후에 뭐 광고도 넣고 막 할 거잖아요 그러면 그 페이지에서 한 페이지에서 과연 광고 클릭을 몇 번 하는 거가 중요한가 이런 거를 생각할 수가 있어요 물론 그렇게만 풀면은 아주 개판이 이제 검색이 되겠죠 왜냐면 광고만 나올 테니까 그럼 100% 찍으니까 그쵸? 네, 그런 건 아닌데 어쨌든 두 가지를 조합하고 이런 식인데 광고를 클릭하고 안 클릭하는 거는 실제로는 이제 어떤 로스 펑션에다가 넣어가지고 모델링 하기가 복잡할 수도 있어요 왜냐하면 이제 그 클릭하는 것과 실제로 랭킹이랑 그게 약간 수학적으로 잘 정의를 할 수 있겠지만 뭐 어떻게든지 할 수 있겠죠 실제로는 약간 다르다는 거죠 비즈니스 로직과 실제로 얘가 풀려고 하는 문제는 여러 가지 복잡한 피드백과 그런 게 있기 때문에 뭐 그렇게 쉽게 정의가 안되요 그러면 어떻게 하느냐 실제로 현실에서는 그런 것도 해서 평가를 해요 평가형 데이터를 만들고 학습형 데이터를 만들고 다 하고요 그 다음에 이 실제로 모델 자체가 이게 현실에 라이브로 디플로이 됐을 때 그 디플로이 된 거에 대한 인플레이션 때문에 사람들이 또 다르게 행동을 하거든요 그래서 현재의 데이터랑 달라져요 행동이 뭐 예를 들어서 검색엔진이 더 좋아졌다 그럼 더 많이 들어올 수 있겠죠? 더 많이 들어와서 클립을 더 많이 할 수도 있어요 그러면 검색엔진 랭킹만 좋아져서 바뀐 게 아니고 사용자가 증가했잖아요? 이런 게 여러 가지로 바뀌기 때문에 완전히 실무에서 결정을 할 때는 AB 테스팅 같은 걸 결국에 많이 합니다 그래서 라이브 트래픽에서 검색엔진이라고 치면 라이브 트래픽의 몇 퍼센트를 우리가 새로 디자인한 걸 보내고 안 보내고 뭐 이런 것도 있고 물론 이게 그냥 한 번에 풀리는 스위스 나이프 같은 건 아닌데 여러가지 굉장히 복잡한 종류의 그런 인터랙션들이 현실적으로 많기 때문에 이런 거를 하나하나씩 독립적으로 하기 위해서 평가도 따로 빼고 학습도 따로 빼고 그 다음에 그걸 통제하기 위해서 실제로 실험은 또 다른 식으로 하고
이런 식으로도 많이 합니다 네 검색 얘기가 나와서 제가 좀 더 말씀을 드리면 그 알고리즘은 사실 굉장히 단순한 손실함수 가지고 그냥 동작을 하는 건데 말씀하셨듯이 실제 검색 결과는 단지 그 손실험수의 최대값을 뽑아내는 것 이외에 굉장히 다른 다양한 고려사항이 있기 때문에 예를 들어서 이제 검색 결과가 좋다는 것 이외에 검색엔진에서 실제로 어떤 성인용 어떤 사이트나 아니면 굉장히 좀 혐오감을 줄 수 있는 그런 결과 같은 것도 차단을 해야 되잖아요 그런 건 사실 다른 식으로 평가해가지고 없애야 되는 그런 경우도 있고요 그리고 당연히 말씀하셨듯이 어떤 수입이라는 측면도 있고 검색엔진의 수입이라는 것도 고려해야 되는데 다 넣을 수 없다는 경우고 근데 실제로 그냥 트레이닝 결과만 보더라도 그냥 단지 검색 결과를 좋게 만드는 게 목표라고 해도 검색 쪽에서 이제 잘 알려진 결과 중에 하나는 검색 결과를 이제 평가하는데 가장 위 결과만 볼 수도 있고 top 5 아니면 top 100개를 다 볼 수 있잖아요 근데 사실 검색 결과를 보는 사용자는 웹을 가정하면 탑3, 탑5 이상을 거의 안 본단 말이죠? 그럼 처음 5개만 잘 만들면 거의 대부분 사용자들은 만족을 하는데 검색엔디를 트레이닝 할 때는 그 메트릭을 top 5만 가지고 트레이닝을 하면 안되고 매트릭을 가지고 있는 트레이닝 데이터를 최대한 다 사용해가지고 손실하면서 계산을 해야 돼요 근데 이제 평가할 때는 top 5만 가지고 평가를 하는 거예요 왜냐하면 그게 결국에는 검색엔진을 사용자들이 보는 거니까 그래서 데이터는 학습에 사용되는, 트레이닝에 사용되는 데이터는 굉장히 검색 결과를 처음 100개를 다 좋게 만들어야 되는 그런 목표를 주고 실제로 검색 결과 평가해서 5개만, Top 5만 보는 거죠. 그런 식으로 트레이닝 결과를 좋게 만드는 손실함수랑 그 다음에 실제로 이제 그 회사 비즈니스에 도움이 되는 손실함수랑 다른 결과가 실제로 종종 있어요. 네, 하여튼 현실하면서 얘기를 좀 깊이 들어가봤는데 네, 그리고 모델이 이제 하나가 사용되는 경우도 있고 실무적으로는 이제 여러가지가 조합되는 경우도 있는데 아까 승현님이 말씀하신 그 Federated Running도 약간 그런 경우라고 볼 수 있나요?
모델 에버리징의 일종으로 볼 수 있는데요. 이거는 특정한 어떤 모바일 환경에서 프라이버시를 보존하기 위해서 사용하는 방법이니까 그냥 일반적으로 모델링하는 측면이랑 조금 다르게 봐야 될 것 같고요. 모델을 여러 개 합쳐서 사용한다는 것은 앙상블 모델이나 아니면 그런 식으로 생각할 수가 있겠죠.
그렇죠. 앙상블은 방금 말씀하신 것은 그러니까 모델을 어떤, 그러니까 데이터를 같은 데이터를 가지고 모델을 여러개를 만든 다음에 그 결과를 여러가지 방법으로 합쳐가지고 이제 그런 최종 결과를 만들면은 각 모델의 결과보다 더 좋은 결과가 나온다. 이것도 굉장히 머신러닝에서는 잘 알려진 그리고 이제 딥러닝이 이렇게 인기가 있기 전까지는 굉장히 가장 각광받는 그런 모델링 기법이었죠. 물론 지금 많이 사용되고 있지만 네, 지금도 많이
사용하는 이유가 이게 실무에서 작업을 하다보면 전에 거를 다 갈아엎기가 쉽지가 않아요 그래서 A라는 모델을 만들어서 잘 쓰고 있잖아요 그러면 A라는 모델을 그냥 두고 B라는 모델을 특정한 경우에 사용합시다 이런 식으로 많이 하거든요 그러면 이제 결과적으로는 양상공부만 체험 되는 거죠 그 이유는 몇 가지가 있는데 첫 번째는 잘 되고 있는 거를 굳이 망가트릴 필요가 없고요 두 번째는 이제 뭐 어떤 어떤 한 모델이 전체적으로 다 좋은 거보다는 특정한 경우에 좋은 점이 많고 그 다음에 그거에 굉장히 포커스 해가지고 사용자들이, 개발자들이 이제 똑같이 이제 개발을 따로따로 진행해가지고 합치기가 좀 좋거든요 물론 이제 그 상호간에 여러가지 문제가 있어가지고 인터랙션이 안 좋을 수도 있겠지만 그런 식으로 해서 편업에서는 굉장히 많이 사용합니다
네, 제가 좀 부여한 설명을 드리면은 이제 뭐 다시 검색 엔진 쪽 얘기를 드리면은 검색에 사용할 수 있는 시그널이 굉장히 여러가지가 있으신데 사용자의 어떤 클릭 데이터도 시그널이 될 수 있고 그 다음에 평가자들이 있어요 그래서 검색 결과가 얼마나 좋은지 평가해주는 평가자들이 있는데 평가자들의 어떤 피드바를 가지고 이제 그거에 최적화된 결과를 만들 수도 있고 근데 이 모든 시그널을 하나의 모델에 넣어가지고 결과를 만드는 게 그럼 굉장히 모델에서 학습해야 될 게 굉장히 많다는 거죠 그리고 그 결과도 알기가 해석하기가 어려워지고 그래서 각 시그널별로 모델을 만든 다음에 그 모델을 그냥 나중에 결과를 합치는 그런 식으로 모델링을 하기도 하는 것 같아요 이거를 검색 쪽에서도 그렇지만은 어떤 제가 논문 읽었었던 것 중에서는 링틴에서 이제 그 피드를 만들 때 피드 랭킹을 할 때 사용자들의 어떤 클릭 같은 걸 보기도 하고 사용자들의 어떤 그 공유 그런 소셜 피드는 이제 서로 공유가 되는 게 굉장히 중요한 시그널이기 때문에 공유량을 보기도 하고 그런 식으로 이제 다양한 각 시그널별로 다른 모델을 만들고 그걸 최종 합쳐가지고 이제 결과를 내는 그런 논문도 있었던 것 같습니다 그러면 이제 해석 가능해진 거죠 모델이 하나가 정말 블랙박스가 아니라 각자 다른 기능을 하는 모델 여러 개의 결과를 각자 볼 수 있고 해석할 수 있고 각자 이제 개선할 수 있고 그래서 이제 최종적으로 이제 결과물을 인형작품 결과물을 만들 수도 있고 여러가지 장점이 있는 거죠
실무적으로는 네, 그쵸 네 저희 약간 뭐랄까 텐션이 좀 떨어진 것 같은데요? 너무 깊이 있는 얘기만 많이 하다 보니까 지난 방송에서
너무 그 저는 다른 사람 모르겠고 와이프가 듣다가 별 내용 없는 얘기만 해서 그냥 꺼져서 저한테 저도 그랬는데도 너무 내용이 없다 구독자의 시각은 굉장히 날카로운 거라 청자의 시각은 날카로운 거라서 내용을 너무
우견 없는 감이 있죠 지금 같은 경우는 근데 또 너무 이게 뭐랄까 뭔가 한 시간짜리 무슨 세미나 같이 하니까 이러면 학생들이 중간에 가방 사들고 나간다고요 다른 얘기도 좀 해주고 이래야지
좀 붙어있지 피드백이 오면 그렇게 하겠습니다. 저희는 무조건 피드백 오버필링하는 그런 팟캐스트이기
때문에 어떻게 보면 진영님이 진지축구하시고 제가 헛소리축구라서
지금 질문이 들어왔는데요. 모델들을 합칠 때 어떤 모델을 더 우선시할지 어떻게 결정하시나요? 이렇게 하셨는데 오늘 윤수종님께서 굉장히 좋은
질문을 많이 하셨습니다. 유일한 시청자 아니신가요?
근데 생각해보세요. 저희 세 명이 이렇게 집중해서 하고 있는데 이렇게 질문을 해주시면 지금 이거 팟캐스트
들으시는 분들이라면 다음에 라이브 할 때 오시면 저희가 이름 한 번씩 언급해 드릴게요. 그러니까
좀 오세요. 이거 정말 제가 이런 말 하기 그렇지만 돈 주고도 못 얻는... 맞아.
누가 나한테 돈 주고 이거
하자고 하면 안 되는 거야. 네, 승현님 답변 해주시겠어요? 모델을 합칠 때 그게 웨이트라고 생각할 수도 있겠고 어떻게 웨이트 결정할 수 있는지
정답은 뻔하죠 모델을 잘 합치면 되는데요 모델을 합칠 때 그거에 대해서 모델을 만들면 되는 거죠 모델이 있으면, 모델 a, b, c가 있으면 a, b, c를 각각을 input으로 해서 D라는 애를 만드는 모델을 만들어서 그거에 대해서 학습을 해서 잘 그게 이제 현실적인 어떤 평가 함수에 좋은 지표를 가지면 되겠죠 그렇게 말하면 정답이구요 그 다음에 뭐 정답이 아닌 건 지금 텐션도 엄두리니까 그냥 빨리빨리 진행을 하자면 그냥 당연히 머신러닝은 손을 타기 때문에 손을 일일이 해서 아 이게 이럴 때는 얘가 좋지 않을까 하고 그때다가 적용을 해보는 거죠 그래서 실제로 좋으면 좋은 거고 아니면 다시 하고 그렇게도 많이 합니다 모델,
그러니까 요약을 하면은 모델을 합치는 것도 머신러닝 프로블럼이에요 그래서 그거 역시 데이터셋을 헬라우 데이터셋을 만들어서 거기서 얼마나 좋은지 보고 이제 제일 좋은 웨이트를 그게 만약에 선형모델이면 합치는 방법이 있겠고요 네, 지금 모델 합치는 얘기만 많이 했는데 넘어가시죠. 네, 넘어가시죠. 네, 어쨌든 이렇게 저희가 쉽게 쉽게 얘기를 했는데 결과가 안나오면 어떻게 해야 되나 그게 상당히 중요한 문제인데 사실 뭐 프로그램 같은 경우에 프로그램을 디버깅 한다면 그게 뭐 안돌면 컴파일이 안되거나 뭐 결과가 안나오면 안나오는건데 이거는 잘나온지 안나온지 알기도 어렵고 안나왔을때 어떻게 하면 되는지 그것도 어렵잖아요 그거를 이제 하는 것도 어렵잖아요 어... 그거에 대해서 뭐 그 승용님 책에도 좀 자세히 적혀있는 것 같은데 어떻게 어떻게 해야 되나요? 시청자들이 더 떠나지
않도록 빨리 설명하겠습니다. 책을 사시면 됩니다. 넘어갈까요? 그건 아니고요. 간단하게 설명드릴게요. 이건 사실 모든 문제가 그렇듯이 공짜로 얻는 건 없어요. 그래서 얼마나 머리를 쥐어싸고 하는 게 제일 중요한데 그런 원인이 어디인지 찾는게 제일 중요합니다 그래서 머신러닝 하시는 분들 중에서 아마 테리님도 앞에서 잠깐 말씀드렸지만 뭔가 여기다 다 때려넣으면 다 잘 되지 않을까 이렇게 생각하시는 분들이 많은데 그랬으면은 저같은 사람들이 이제 일이 밥그릇이 없겠죠 실제로 머신러닝은 생각보다 굉장히 복잡하거든요 그래서 잘 동작할 때 있고 잘 동작 안 할 때도 있는데 이게 되게 손을 많이 타요 약간 머신러닝은 손바수로 하는 거거든요 손을 그럼 어떻게 잘 태워야 되냐 하면은 이거는 문제가 여러 군데서 발생할 수 있는데 그걸 하나하나씩 검증해 나가면서 결과적으로 좋은 모델을 찾는건데 일단 첫번째로 성능이 안나올 때 모델에 문제가 있을 수가 있어요 모델 자체가 너무 복잡하거나 너무 간단하거나 아니면 이 모델 자체가 데이터에 적합하지 않을 때 그러면 어떻게 해야 될까 여러가지 모델을 시도해 봐야겠죠 그게 첫번째 문제구요 모델 문제 두번째 문제 데이터 문제 데이터가 어떻게 보면 머신러닝 할 때 가장 중요한 모델을 동작시키는 어떤 연료같은 존재죠 그럼 연료가 구리다 구리죠 성능이 그럼 데이터가 어떤게 문제냐 데이터가 너무 많으면 또 문제구요 너무 적어도 문제고 너무 치우쳐도 문제에요 데이터가 많으면 뭐가 문제냐면 성능이 나올 때까지 시간이 너무 오래걸리죠 그럼 적당히 섞어야 되는데 어떤걸 섞을지는 되게 어려워요 사실 문제가 근데 뭐 그냥 아주 간단한 예제를 들면 뭐 전체 데이터가 막 하늘 이미지 데이터를 처리하는데 하늘 데이터가 그냥 하늘만 있는게 막 999,990개 있고 나머지 막 별이 있는게 막 한 두개 있다 그러면은 하늘은 좀 빼도 되잖아요 그쵸? 그런식으로 중요한건지 안 중요한건지를 잘 판단해서 좀 줄이면 좋구요 적을때는 이제 여러가지가 뭐 모든게 문제지만 적을때는 데이터를 더 구하면 되구요 돈 내면 구할 수 있구요 대부분 많이 그 다음에 아니면 트랜스폴 러닝 같은 거 해야 되죠 이미지에서 자막을 분석한다고 치면 유튜브 동영상 같은 거 태깅 잘 안되어있지만 다 때려넣어가지고 뭔가 임베딩 같은 걸 학습해서 하는 방법이 있겠구요 치우친 경우에는 치우친과 밸런스를 잘 보고 판단해가지고 밸런스를 잘 맞춰주면 좋구요 이제 그게 두번째 문제입니다 세번째 속도 문제 너무 느리면 어떻게 될까요? 당연히 돈을 쓰면 되죠 좋은 컴퓨터 사면 됩니다 좋은 컴퓨터 없다? 좋은 컴퓨터 빌리면 되죠 클라우드 써가지고 뭐 다 때려넣고 돈 바르고 돈이 모자란다? 그러면은 돈이 모자라니까 사람이 노가다를 해야죠 어떻게 노가다를 할까요? 이제 그러면은 알고리즘 중에 학습이 더 잘되는 모델들이 있어요 더 빠른 애들도 있고 더 간단한 거는 보통 더 빠르죠? 그런 것부터 시작해서 이제 하는 방법도 있고 그 다음에 프로그래밍 여기서부터 엔지니어가 갈리기 시작하는데 이제 어디가 바틀렉인지 찾아야 돼요 그러면 이제 소프트웨어가 느린거니까 머신러닝도 소프트웨어니까요 잘 찍어봐야죠 어디가 바틀렉이다 프로파일링해서 어디를 조지면 빨라질지를 판단하고요 머신러닝은 다 벡터 연산이거든요 매트릭스 행렬 푸는 연산이 대부분인데 그럼 행렬을 어떻게 빨리 풀까 행렬 소프트웨어를 쓰면 좋죠 그 포루프 도는 것 보다는 아니면 뭐 딥러닝 같은 경우에는 매트릭스 연산이 빨라서 GPU를 쓰는 거예요 GPU를 쓰면 좋은 점이 많이 있고요 그래서 그런 걸 쓰면 되는데 GPU를 항상 쓴다고 빠른지 그렇지 않죠 이거는 뭐 부모님이 아시면 별로 안 좋지만 GPU를 쓴다고 항상 빨라지지 않습니다 하지만 항상 빨라진다고 말씀을 해서 뭐 집에 좋은 GPU를 꼽고 그 다음에
게임을 즐기시면 됩니다 네, 그렇죠. 원래 다들
노트북 사달라고 할 때 인강 들어야 된다고 노트북 사고 게임하고 싶을 땐 딥러닝 한다고 GPU 사시면 됩니다.
네, 그렇죠. 근데 GPU가 굉장히 도움이 많이 돼요. 빠른 경우에는 100배, 1만 배까지 차이 나는 경우도 있고요. 차이가 굉장히 많이 나는데 GPU가 어중이 떠중이 몇 개 꼽아서는 애매한 경우도 많고 실제로 바틀렉이 딴 데 있을 수도 있거든요. 메모리, CPU 아니면 그냥 운영체제 아니면 데이터 자체에 굉장히 많은 것이기 때문에 일단 지르시면 기분은 좋겠지만 지르시기 전에 한번 해보고 하면 돈은
좀 아낄 수 있습니다 그리고 제가 머신러닝을 직접 코드를 짜시고 배우시는 분들께 한 말씀을 더 드리자면 뭐 그러신 분들 많아요. 딱 이렇게 막 스크래치부터 다 짜시고 딱 해보고 돌려봤는데 어? 이거 잘 된다고 그러던데 안되네? 이거 안되는 거잖아 라고 하시는 분들이 있어요. 근데 제가 말씀드리고 싶은 거는 거장들의 작품을 의심하기 전에 본인의 코드를 먼저 의심하시라. 그래서 분명히 본인이 짠 코드나 본인이 데이터를 프리프로세스 하는 과정에서 뭘 날렸거나 그런게 있을 수 있으니까 일단 충분히 본인의 의심을 다 한 다음에 그 다음에 이제 파퓰러한 메서드라던지
이런걸 좀 의심하셨으면 좋겠다는 말씀입니다 아 의심
중요하죠 근데 요즘에 딥러닝이 특히 리인포스먼트 러닝 강화학습이 파라미터를 엄청 타요 그래서 그거를 똑같은 결과 만들기 진짜 힘들거든요 정말 갈려들어가야 돼요 그래서 밤새면서 다 여러개 해보고 해서 좋은 파라미터 찾고 이렇게 해보고 저렇게 해보고 논문에 모든 블랙매직을 다 써놓진 않거든요 모든 흑마술을 써놓으면은 걔네도 쓸 공간도 없고 나는 잠을 별로 안자고 커피를 많이 마셨는데 때문에 잠을 못자가지고 연구를 더해서 좋은 성과를 냈다 뭐 이런거 논문에 쓰기 공간이 없거든요 쓰고 싶겠죠 당연히 블로그에 뭐 싸지르는 사람도 있지만 근데 그런게 다 안 늘려있어요 그래서 논문대로 했는데 왜 안되냐 그러면은 그게 논문이 속임수인 경우도 있어요 있는데 그것도 있지만 실제로 그게 그 논문에 써있는거 말고도 되게 여러가지 시행착오가 많은 경우가 많습니다
네, 그니까 어쨌든 여러가지 지금 말씀을 해주셨는데 다 좋은 포인트인 것 같고 굉장히 이제 디버깅을 하는 게 참 쉬운 일이 아닌 만큼 디버깅을 하는 거를 최대한 쉽게 만들려고 노력을 해야 될 것 같고요 그 방법 중에 하나가 이제 태리님이 말씀하셨듯이 데이터를 최대한 자기 데이터를 의심을 해봐야 되고 데이터가 잘못됐을 때 바로 알 수 있도록 테스트를 걸어놔야 되고 그 다음에 이제 모델링을 할 때는 모델이 여러가지 종류가 있죠 굉장히 블랙박스라서 흙맛으로 부리는 그런 모델이 있고 그 다음에 뭐 속이 환하게 들여다보이는 선형모델 같은 것도 있고 근데 이제 선형모델이 디버밍 할 때 빛을 좀 발화하죠 성능이 좀 안나올 수는 있겠지만 굉장히 이해하기가 편하기 때문에 그래서 이해하기 편한 모델이 이런 시나리오에서, 실무에서 굉장히 자주 나오는 시나리오인데 굉장히 빛을 발하는, 예를 들어 내가 뭐 검색 추천 알고리즘을 개발하고 있는데 회사에서 이걸 하고 있어요. 근데 우리 굉장히 중요한 그, 뭐, 재료가 있는데 거기서 결과가 이상하게 나와요. 근데 그거를 고쳐야 되는데, 오늘 고쳐야 되는데 이게 만약에 저희가 이해할 수 있는 모델이면은 바로 고칠 수 있죠. 근데 이해할 수 없는 거면 그게 될 때까지 그걸 정말 날밤을 새야 돼요. 그게 정말 실물을 하다보면은 이해를 할 수 있는 모델이 참 중요하다. 이런 생각을 많이 하게 됩니다. 네, 근데 그거에 대해서
그냥 한 가지만 덧붙이자면 저는 예전까지는 interpretability, 이해를 가능하게 쉽게 하는 모델이 굉장히 중요하지 않을까 엄청 오랫동안 고민을 했는데요. 최근에 생각은 약간 알파고 제로도 단적인 예인데 뭐 어차피 기계님의 그 위대한 뜻을 어떻게 인간이 알 수 있겠습니까? 잘되면 잘 되는거죠 라는 생각도 있어요. 아 정말이에요. 왜냐하면... 말씀하시죠. 아니요 저는
별거 없습니다. 요즘에 그런 생각이 맞는 것 같아요. 맞다기 보다는 많은 분들이 전향을 한다고 할까? 그러니까 인간이 하는게 사실 처음부터 끝까지 다 이해할 수 있으면 좋지만 사실 그게 아니라 처음부터 끝까지 어느정도 중간중간에 블랙박스를 좀 껴넣더라도 그것을 잘 매니지 하는게 인간의 역할이지 모두 다 이해하는거는 모두 다 이해하면서 성능이 안좋은 것 보다는 라지스케일에서 어느정도 블랙박스를 다 껴서 최고의 성능을 내는게 우리가 할 일이 아닌가라는 쪽으로 많은 분들이
전향을 하고 있는 것 같아요 네 그렇죠
그리고 이게 또 이 말을 좀 잘못 들으시면 안되는게 제가 아 모델 인터프리트 어빌리티는 구리다 이렇게 말씀드린게 절대 아니구요 왜냐면 당연히 싫어하실테니까 제 친구들도 근데 그게 아니구요 그게 필요한 분야가 있고 필요하지 않은 분야가 있어요 필요한 분야는 당연히 아까 테레님이 하시는 것처럼 의학! 의학은 어차피 판단을 기계가 못내릴거에요 뭐 거의 많은 시간동안은 그럼 의사들이 그걸 이해를 하고 아 얘가 이랬는지 알아야 되잖아요 환자한테도 설명을 해야되고 뭐 그런거나 아니면 여러가지가 있겠죠 필요가 없는 분야! 그러면 필요가 없는 분야는 이게 자체가 사람한테 위해가 크게 없거나 아니면 그냥 잘 동작하면 된다. 바둑을 둔다. 바둑을 두는데 그게 동작하는 거 다 알아야 됩니까? 바둑만 잘 두면. 훌륭하죠. 뭐 그런 거 있죠. 네, 그런 식으로 생각해볼 수가 있습니다.
네, 어쨌든 모델의 해석이 가능한지, 인터플리터빌리티가 고려사항 중에 하나인데 그게 절대적인 건 아니고 굉장히 실무에서는 결과가 나오는 속도도 그렇고 정확도 말할 것도 없고 여러가지 고려사항이 있다는 거 네 그래서 어쨌든 모델을 만들었다고 치고 다음에 이제 마지막 단계이자 굉장히 실무에서 중요한 구현 및 유지보수 단계가 있죠 이제 그거를 모델을 실제 아 모델이 물론 한 번 그냥 쓰이고 그냥 많은 모델도 있지만은 많은 경우에는 이제 실제 돌아가는 동작하는 시스템의 일부로써 모델이 구현이 되고 그리고 이제 지속적으로 뭔가 결과를 내야 되는데 여기에서 어떤 고려사항이 있을까 한번 말씀을 나눠보죠
뭐 그냥 제가 시작을 먼저 할까요? 뭐 실무에서 구현 유지보수가 지금 맨 끝에 나왔는데 이게 사실 맨 앞에 나와야 돼요. 왜냐하면 구현, 유지보수 합쳐놓은 쪽 그러면 유지보수로 가집시다 구현은 앞에가 다 구현이니까 실제 뭐 회사에서 일을 한다고 치면 구현 30% 되나? 30%가 될지 안 될지 모르겠어요 그 정도 시간이고요 70% 유지보수 어려워요 유지보수는 왜냐면요 이게 굉장히 많은 구현할 때 사람들이 생각보다 굉장히 많은 과정들을 하거든요 되게 기본적으로 뭐 이 상태에서는 OS가 막 스케줄링을 항상 이렇게 할 것이다 아니면 이럴 때는 매트릭스가 이런 식으로 항상 들어오겠지 데이터가 이렇게 들어오겠지 아 설마 이게 이렇게 될까? 이렇게 됩니다 다 그렇게 돼요 다 그렇게 되면 어떻게 되냐면요 다 망해요 다 망하고 내가 막 실험실에서 열심히 막 이렇게 아 이렇게 만들면 우리 이렇게 떼부자 될 수 있다 근데 막 마이너스 치고 있고요 마이너스만 치면 괜찮은데 막 크래싱하고요 근데 다 여러가지 예외적인 상황들이 많거든요 이게 현실이라는게 굉장히 복잡한 시스템이에요 그래서 그거를 거기서 잘 동작하는걸 만드는게 쉽지가 않기 때문에 처음부터 모든거를 다 알아서 그걸 다 대비해서 만들 수가 없어요 그러면 이제 결국에는 유지보수를 잘 해야되는건데 유지보수를 잘 하는거에는 제가 뭐 강조를 하자면 역시 테스트를 잘 따야되요 테스트는 정말 두번 세번 강조해도 지나치지 않습니다 테스트를 어떻게 해야되냐? 자동 테스트를 만들어야 돼요 이쯤 되면 거의 소프트웨어 엔지니어링 그런 쪽이 되겠는데 실제로 머신러닝 시스템을 잘 만들려면 이런게 다 필요합니다
근데 자동 테스트라고 하셨는데 구체적으로는 그 시스템을 데이터셋 적당한 데이터셋 하나에 넣어서 그게 결과가 계속 나오는지 그걸 본다는 말씀이신가요? 왜냐면은 사실 데이터셋 하나에 대해선 결과가 잘 나올 수도 있지만 기계학습의 특성상 데이터셋이 바뀌었을 때 계속 결과가 잘 나와야 되는데 그 하나에 잘 나온다고 다 잘 나왔는지를 보장할 수도 없을 것 같고 테스트를 기계학습 알고리즘을 위한 테스트를 짠다고 했을 때 어떤 고려사항이 있을지
좀 궁금한데요 뭐 사실 둘 다죠 픽스된 테스트 데이터에 대해서 항상 잘 동작하는 시스템이 있어야 되고요 왜냐하면 시스템을 우리가 바꾸기 때문이에요 그냥 어떤 사진을 분류하는 어떤 시스템이 있는데 사진 분류를 하는 것 중에서 하나가 되게 심각하게 크리티컬하다 그러면 이 시스템을 고쳐야 되잖아요? 근데 고쳤는데 이 시스템을 고칠 때 그래도 잘 되는 부분에 대해서는 계속 잘 돼야 되잖아요? 이거를 검증할 방법이 그렇게 많지 않아요. 이거를 이제 그런 테스트를 통해서 검증을 하는 거고요. 두 번째, 시스템은 잘 있는데 데이터가 미치는 경우가 있거든요. 데이터가 왜 미치냐면 이 데이터를 구할 때 실무에서는 보통 데이터가 우리가 다 갖고 있지 않아요. 데이터 A는 팀 A에서 하고요. 데이터 B는 B팀에서 하고요. 데이터 C는 C팀에서 해요. 근데 데이터 A의 어떤 애가 팀을 그만뒀어요. 그래서 그 애가 다음에 온 애가 데이터 A를 좀 더 잘 만들어보려고 그 사람은 좋은 선의에서 시작을 했겠죠. 왜냐하면 그 사람도 이제 서로 대학교 나온지 얼마 안됐고 그 사람이 굉장히 열심히 하려는 사람이에요. 그래서 데이터 A를 더 잘하기 위해서 새로운 데이터 소스도 하고 이렇게 처리를, 전처리도 바꿔보자. 근데 전처리를 바꿨는데 이제 그거를 우리한테 안 말한거죠. 왜? 말하는게 필요한가 생각을 한거에요 근데 데이터의 레인지가 0.1 달라진거에요 모든게 다 offset이 0.1 된거죠 그럼 머신러닝 시스템이 어떻게 될까요 망하거든요 뭐 안망할 수도 있어요 근데 거의 망한다고 보셔야죠 현실적으로 보면 약간 아 이런 일은 없었으면 좋겠는데 이러면 다 일어나거든요 모든게 다 일어나요 그러면 어떻게 하느냐 그럼 데이터 자체에서 검증을 해야 되는 거죠 항상 데이터 어떤 디스트리뷰션을 감시한다든지 아니면 데이터가 이렇게 어떤 익스펙테이션이 굉장히 있으면 그 익스펙테이션에 대해서 어떻게 동작하는 거라든지 이 데이터를 학습했을 때 그 어떤 성능이 최소한으로 계속 나와야 된다든지 이런 게 있으면 이제 그 팀이 바꾸고 나서 까먹고 안 말했는데 이쪽에서 알 수 있는 거죠
그 데이터에 대해서도 계속 감시를 하고 있어야
되는 거네요 네. 코딩을 할 때 코드 안전성에 대해서 이렇게 어설치를 한다든지 이런 것만 필요한 게 아니라 사실은 머신러닝을 할 때 데이터에 대한 안전성을 계속 체크하는
루틴도 필요한 것 같아요. 네. 그렇죠. 네. 네. 아무튼 뭐 지금 뭐 구현 유지 고수가 사실 그리고 이제 또 얘기 많이 나오는 것 중에 하나가 머신러닝 알고리즘을 사실 어떤 보통 뭐 파이턴 이런 걸로 많이 라이브러리 쓰시는데 R 같은 것도 있고 근데 실제 시스템은 뭐 자바나 뭐 C 이런 다른 어떤 프로그래밍 언어나 아니면 아키텍처로 동작하는 경우가 많기 때문에 그게 사실 서로 잘 동작하기가 쉽지 않고 만약에 연구용으로 쓰던 걸 그냥 갖다가 실제 돌아가는 시스템에 넣으면 여러가지 성능이 떨어진다 할지 아니면 연구용 코드의 안정성이나 그런 것 때문에 크래쉬가 난다 할지 여러가지 부작용이 있어서 가능하면 다시 이제 실제 프로덕션 용으로 구현을 해서 써라 이런 얘기를 많이 하는데 근데 이제 또 사실 생각해 보면 그러면 프로덕션에 머신러닝 넣을 때마다 구현을 다시 해야 되면 그것도 굉장히 참 어려운 일이거든요 이런 거는 그 어떻게 하시는지 그런 거를 매번 구현을 해야 된다고 생각하시는지 아니면 이제 적당히 타협을 타협을 해야되는지 어떻게 생각하세요
이런거는 뭐 구글은 그거에 대한 해답을 찾았죠 텐서플로우가 그런 역할을 수행하죠 텐서플로우로 짜면 텐서플로우는 이제 파이썬에서 abstract가 되어서 실제로는 이제 어떤 어떻게 연산을 하면 좋은지에 대해서 컴퓨테이션 그래프 뭐 그냥 그런 그래프를 만드잖아요 연산 그래프를 만드는데 그럼 그거는 C에서도 돌고 C++에서도 돌고 뭐 서버에서도 돌고 모바일에서도 돌고 다 돕니다 그래서 그렇게 앱스트랙션을 한번 한 라이브러리가 있으면 그거를 쓰시면 되구요 근데 이게 뭐 완전히 C나 C++로 하드코어하게 짠 것 보단 좀 느리겠죠 이게 한 단계가 더 있는 거니까 그래서 뭐 그런게 진짜 속도가 겁나 필요하다 뭐 게임을 짠다 그러면은 뭐 당연히 어떻게 새로 구현한 것 밖에 없지만 구현을 하면서 이제 아무래도 이렇게 했을 때랑 저렇게 했을 때랑 그니까 Python으로 짠 거랑 C++로 짠 거랑 결과가 똑같이 나오면 좋겠죠 그럼 구현이 잘 됐는지 알
수 있겠죠 네 저도 텐서플로 처음에 얘기 들었을 때 왜 이거를 이렇게 사실 그렇게 그 여러 그 언어나 환경에서 호환성을 가져가려고 굉장히 복잡해진 측면도 있잖아요. 실제 그 구조가, 예를 들어 뭐, 사람들이 최근에 텐서플로우랑 파이톨치 이런 거 비교할 때 파이톨치는 훨씬 더 직관적으로 바로바로 결과 보면서 짤 수 있는데 텐서플로우는 다 잘 만들어 놓고 돌려야지 결과가 나오는 걸 볼 수 있기 때문에 굉장히 비건인데 힘들다 이렇게 나오는데 그게 아마 제가 봤을 때 말씀하신 대로 프로덕션에서 바로바로 쓸 수 있게 그렇게 하다보니까 그런 개발상에서의 좀 더 편의성을 희생한게 아닌가 이런 생각도 좀
드네요 네 뭐 제가 또 구글 다니기 때문에 제가 텐서플로에 대해서 함부로 얘기를 못하거든요 그래서 얘기를 못하는 거 양해를 해주시고요 구글에서 쓰는 텐서플로우는 밖에 보다 훨씬 더 많이 개발되어 있어요 그래서 그런 문제점들을 많이 해결하기 위해서 아주 많은 노력을 하고 있습니다 네,
아무튼 뭐 그래서 유지보수 구현 이 부분까지 간단히 다뤄봤는데 지금 시간이 1시간 반을 넘었기 때문에 네, 오늘 뭐 극약습의 실무라는 아주 거창한 제목으로 문제 정의부터 데이터 수집, 정제, 모델링, 구형, 유지 모습까지 또 너무 많은 주제를 다룬 감이 있지만 그래도 한 번 끝에서 끝까지 다뤄봤다는 만족감이
좀 드는데요. 요약을 하면 뭐 하나 자동으로 되는거 없다 다 손을 탄다 그러니까 다 확인해보고 다 테스트해보고 제일 잘되는거 골랐더라도 그게 정답은 아닐 수 있다 뭐
이런거죠 네 그렇죠 그리고 진짜 안되면 역시
전문가를 부르는게 더 싸다 아니면 전문가 선택을 입든지 아무래도 돼지닷컴에 온라인 강의 추천은 사람이 하게 되지 않을까 기계학습 안 쓰고 어쨌든 저는 사실 즐겁게 녹음한 것 같고 그다음에 녹음하면서 많이 배운 것 같아요. 대리님, 승현님한테 많이 배운 것 같고 그래서 이제 이렇게 바쁜 시간에도 참 짬을 나서 앞으로도 계속 하지 않을까 그런 생각이 들고 오늘 또 이렇게 자리를 끝까지 지켜주신 지금 8분 남으셨네요. 8분 감사드립니다.
늘어났네요. 늘어납니다. 자리를 지키고 있는 건지 아니면 창만 열려있고 편하게 가신 건지는 아무도 모르는 거예요. 창을
2개씩 연 거 아니에요? 2개씩.
데이터를 항상 의심해야 돼요. 창 여러 개
열어봐야겠다. 잠깐만요. 잠깐만요. 여러 개 인코그네이터로 잘못 눌렀다. 인코그네이터로 이거 열면 어떻겠지? 이렇게 또
네 감사합니다 네 저희도 너무 감사드리고 아
안 늘어나네요 인터넷으로 지금 5개 늘었는데 죄송합니다
두 분이 유튜브가 그렇게 장난친다고 올라가면 유튜브가
아니죠 유튜브 관대합니다 뭐 이 정도 가지고
네 두 분 한 말씀씩 하시고 네 그 다음에 방송 마치도록
하죠 제가 먼저 할까요? 일단 방송 끝까지 들어주셔서 감사하고요 제 책이 2세에 출판에 들어갔습니다 책 광고를 하자면 아까 말씀드린 게 8장에 좀 나오는데 제가 그것에 대해서 설명을 하자면 사실 1시간, 2시간도 모자라게 계속 설명을 할 수가 있어서 책에다가 좀 자세한 거는 적어 놨거든요 방송에서 에센스를 다 말해서 책을 사시진 않으셔도 되는데 자세한 게 궁금하시면 그쪽 보시면 좀 더 자세히 나와 있어요. 그리고 오늘 방송 그래도 같이 녹음해서 즐거웠고요. 제가 중간에 약간 텐션을 끌어올려 보려고 서서 방송을 했는데 네, 아주 도움이 된 것 같습니다.
네, 제가 뭐 2회째네요 2회째고 여러가지 비판이 있지 않습니까? 너무 쓸데없는 얘기를 많이 한다던지 아니면 너무 진지하다던지 아니면 게스트를 돌려막기 하는게 아니냐 이런 의식도 하고 있고 그러면서 불구하고 들어주셔서 감사하고 이게 언제까지 될지 모르겠지만 아무래도 진영님의 의지가 있는 한 계속되지 않을까 저는 이 기회를 통해서 승연님도 그렇고 다른 분들 좋은 분들 많이 만날 수 있고 얘기 나눌 수 있어서 참 좋은 것 같아요 계속 그랬으면
좋겠습니다 네 아무튼 뭐 제가 최대한 지속가능한 방송을 추구하고 있고 따라서 굉장히 편하게 하고 있기 때문에 지속가능한 측면에서는 말씀 드릴 수 있고요 네 어쨌든 저희가 방송이 또 보완할 점이 있으면 그거는 저희 항상 피드백 받고 싶기 때문에 피드백으로 알려주시고 그리고 뭐 도움 방송에 대해서 어떤 형태로든 도움 주실 분이 있으시면 그것도 너무 감사하게 하겠습니다.










