나는 2학년 후반~졸업까지 굉장히 많은 프로젝트를 진행했다.

학부연구생으로써도 그렇구, 각종 교외 공모전 및 대외활동에서 한 것들, 교내 캡스톤디자인/연구 수업에서 한것들, 교내 수업에서 한 팀플 등등... 

모든 프로젝트들에 정말 열심히 참여했고, 하나하나 많이 신경쓴 것들이라 그냥 넘어가고 싶지 않았다.

프로젝트들을 한번에 나의 포트폴리오로써 정리해두고 싶었다. 또 기왕이면 이 포트폴리오를 통해서 수상도 하고싶었다...

대학생/청년이 참여할만한 포트폴리오 경진대회/공모전이 있나 이것저것 찾아보다가..

아마 국내 유일한 포트폴리오 경진대회일, 한국공학교육인증원 주관 "학생 포트폴리오 경진대회" 를 발견했다. (이거 외에없는 것 같다)

매년 중순쯤 개최되고, 각 학교별로 먼저 교내대회를 진행한 후, 교내 수상자 최대 5명이 전국 포트폴리오 대회에 제출할 수 있는 기회를 얻게된다. 그렇게 전국 포트폴리오 대회에서 모든 학교에서 제출된 포트폴리오끼리 다시한번 경진한 후, 시상하는 방식이다. 

과거와는 달리 최근에는 총 4가지 부문으로 나누어 경진 및 시상한다. 1분야)종합, 2분야) 캡스톤디자인활동, 3분야) 국제 캡스톤디자인활동, 4분야) 취-창업 활동보고서. 

 

 

나는 1분야)종합에 참여하고 싶었으나, 해당 부문에 참여하기 위해서는 내가 소속된 학과가 Abeek? 참여 학과여야해서 참가자격이 없었다 ㅠㅠ. 나 심지어 소속학과 두개였는데 둘 다 아니래... 

그래서 어쩔 수 없이 다음 순위인 2분야) 캡스톤디자인활동(종합설계) 에 참여했다. 

다만.. 2분야는 오로지 캡스톤디자인 수업에서 진행한 프로젝트만 다뤄야했기때문에, 그 외 일반 수업에서 했던 팀플이나 다른 개인적 학술연구활동은 기재할 수 없었다.

사실 캡스톤디자인 수업에서 진행한것들은 뭐 경진대회에 나가거나.. 논문 쓰거나 했지만, 팀플 및 개인학술활동 등은 하고 끝났다 느낌이라.. 그런 자잘한 팀플들을 정리/기록해두고 싶어서 포트폴리오 대회에 참여하려고 했던건데 ㅠ. ㅠ 그게 아쉬웠다. 

기존의 목적을 이룰 순 없게되었지만, 그래도 포트폴리오 경진대회가 있는걸 알게 된 이상 참여안할수없지!! 하고 참여했다.

사실 여기서 일화가 있는데.., 내가 우리학교에서 교내 포트폴리오 경진대회(for 전국대회 예선) 를 진행한다는 공고를 봤을때는 이미 신청접수가 마감된 시기였다. 

또, 대학 재학중인 학부생만 참여가가능한데.. 나는 이번학기가 끝나면 졸업할 예정이었다. 즉, 교내대회때는 학생신분이지만 전국대회때는 학생신분이 아닌 것...

접수도 마감됐고 참여할수있는 신분인지도 모르겠어서 포기할까 .. 하다가, 그래도 할 수 있는데까진 해보려고 노력해보자! 하는 마음에 참여할 수 있는지 학교 및 공학교육인증원 등에 전화를 걸었다.

결론적으로 난 (뒤늦게) 참여할 수 있었다. 학교측에서두 다행히 아직 참여할 수 있다며 받아주셨고(잘 할 수 있다고 어필을 좀 했던듯), 인증원에서도 참가신청 기준일에 학생신분이면 된다는 답변을 들었기 때문! 

관련해서 후배들에게 정보공유차 인스타 스토리도 올렸었당... 나처럼 미리 포기해버릴뻔한 친구들 있을까봐 ㅠㅠ 

그리고 나는 2분야인 캡스톤디자인 부문에서 전국 1등했다. 

각 분야 수상자 4명 중, 위에 2명이 공학교육인증원상, 밑에 2명이 공과대학어쩌고상이었다. (공학교육인증원상이 더 높은 상!!)

전체 리스트를 훑어본 결과 학교, 이름 둘다 가나다순 정렬이 아니니.. 젤 위에 있는 내가 2명 중에서도 1등이겠지. 그러면 내가 2분야 통틀어 1등이군.. 이라고 생각하기로함

제출했던 포트폴리오는 아래 linked in 의 수상이력 란에 올려두었으니 필요시 확인할 것.. 

https://www.linkedin.com/in/evedayekim/

나는 산공+소융 복전이다보니 캡스톤디자인 수업 관련 프로젝트만 4개여서.. 4개 모두 작성했었다.

연구실 생활하면서 짬날때 만드느라 많이 부족하지만 ㅠㅠ 그래도 추후 대회 나가볼 후배들에게 도움이 되었으면 좋겠다.

참고로 나한테 가장 많이 되었던 조언은.. 포트폴리오 심사할때 심사원들이 컴퓨터로 ppt를 확인하는게아니라, 모두 출력하여 확인한다는 것. => 어두운 배경은 안깔끔해보일 수 있음.

그 말 듣고 나두 원래 어두운 배경으로 만들다가 몽땅 밝은 배경으로 바꿨다.

꼭 출력하여 결과물이 어떤지 직접 확인해볼 것을 추천함.

그리고 포트폴리오에는 본인만의 스토리가 담겨있는게 좋은 것 같다.

즉 자신이 이 포트폴리오를 통해 사람들에게 전하고자 하는 의미?! 생각하는 것들? 등등.

 

암튼 시상식에 다녀왔다. 시상은 매년 다른 곳에서 하는듯? 이번년도는 대전 컨벤션센터에서 했다. (카이스트 다니던 나는 완전 이득.. 택시타고 15분이었다.)

시상식만 한건 아니구, 이날 대전 컨벤션센터에서 산학협력Expo 해서 겸사겸사 같이한듯했다.

전국의 온갖 학교들이 다 왔더라... 다양한 주제의 프로젝트들이 전시되어있어서 볼거리가 많았당.

이런거 하는줄 나만 몰랐냥?....???

시상 전에는 산업계 및 학계에 있는 여러 전문가 분들이 오셔서 여러 주제로 발표해주시고 토론해주셨다.

어떻게 하면 산업계와 학계가 잘 발 맞추어 성장/발전할 수 있는지....가 주요 토픽이었다.

다만 너무 특정분야에 제한하여 말씀해주신 분들이 종종 있었는데, 내가 그 분야가 아니다보니 중간중간 재미가 없었다. 그래서 그냥 잠깐 밖에나가서 학생들이 산학협력으루 진행한 프로젝트 결과물 전시회장 같은데 가서 이것저것 경험했다. VR낚시게임이랑 VR방탈출게임.., 등등...ㅋㅋ SW 아니더라도 신기한 거 많더라. 뭐 개구리 생태계 어쩌고랑 커피 어쩌고..

시상식 끝나면 바로 연구실가서 미팅해야했어서 짬내서 체험하구왔다.  

그리고 다시 돌아왔더니 시상식 예행연습 한다더라.. 

뭔가 열심히 살아가는 사람 같이나와서(사실아닌뎅) Linkedin 프로필 사진도 이거루 바꿈

4년제 대학이랑 2/3년제 대학은 대회를 각각 별도로 경진하는데 시상은 같이했다.

그래서 내 차례까지 되는데 꽤 기다렸당.. 사람도 많구...

암튼 무사히 상 받고 왔다 :D

아쉬운건 대상은 1유형에 참여한 사람들중에서만 선발해서 교육부장관상을 받을 수 없었다는 것...

그냥 2, 3, 4유형도 각각 대상 주면 안되나!? 그랬으면 더 열심히 만들었을텐데....

암튼 내가 참가한 2유형에서 받을 수 있는 가장 높은 상 수상해서 기분이 좋았다.

학부생활을 잘 마무리한 것 같아 기쁘다. (졸업한진 꽤 되었지만..)

대학원 생활도 보람차게 살아야지

 

function KeepClicking(){

console.log("Clicking");

document.querySelector("colab-connect-button").click()

}

setInterval(KeepClicking,60000)

 

학부연구생 아니고 성능좋은 데스크톱도 없어서 (학부연구생일땐 할당해주신 데스크톱과 GPU 서버의 소중함을 몰랐지...)

졸논 연구를 성능 안좋은 내 노트북이랑 코랩으로 하는 안쓰러운 나...

코랩은 매번 램 용량 제한이랑 시간 때문에 터지고

노트북도 램 용량때문에 터지고 돌아가는것도 엄청 오래걸리고

또륵.. 진짜 한 학기동안 너무 힘들었다.. 

그나마 학교에 부탁드려서 대여받은 데스크톱도... 램 용량이 8기가... 

....

그나마 코랩의 런타임 유지 시간 제한을 완화할 수 있는 방법인 자바스크립트  코드...

---

그리고 동영상 16배속으로 하는 자바스크립트 코드

콘솔창에서 쓸 때 막혀있는거같아도 그 top 이라고 써진 부분 에서 레이어를 아랫단으로 변경하면 웬만하면 사용가능

유투브, 넷플릭스, 국민취업지원센터동영상, 연구실안전교육동영상 등에 적용가능 

document.querySelector('video').playbackRate = 16

만약에 JWPlayer 동영상이면 이거 쓸것

document.getElementById("video").querySelector("video").playbackRate = 2

  


이제서야 올리는 후기!
사실 돌아오자마자 후기 작성해서 학교에 제출했었는데, 잊고있다가 블로그에도 남긴다.
슬슬 또 2023년도 가을학기 신청 받는 것 같던데, 준비하는 분들에게 도움이 될 수 있길!
참고로 나는 프로그램 기간동안 팀장이자 1저자로서 책임감을 가지고 성실히 지냈고, 결과적으로 프로그램 기간 중 완성한 논문을 IEEE 국제 학회에 등재할 수 있었다!
프로그램을 마무리하고 담당 지도자분들과 인터뷰 할때엔 우리 팀이 역대 퍼듀에 왔던 팀들 중 한 손가락에 꼽힐정도로 잘 해왔다는 칭찬도 들었다.  
다음번 가는 친구들도 열심히 노력해서 좋은 경험을 하고 올 수 있으면 좋겠다.
그리고 제발 담당 교수님과 담당 지도자님 말씀을 잘 듣고 잘 따랐으면 좋겠다. 모두 여러분을 위한 지도, 조언들일 것이다.
후기 아래에 그 외 Rule 을 정리한 노션 페이지나 Purdue 의 일상을 담은 브이로그 영상 등 링크를 올려두었으니 필요시 참고할 것 


K-SW Square Fall Program 2022 / 경희대학교 소프트웨어융합학과 (& 산업경영공학과)

고민하지 말고 무엇이든 도전해보아야겠다는 생각을 하게 되었습니다. 한국에서만 지내다 보니 외국, 특히 미국에 가서 연구한다는 것이 이루지 못할 꿈만 같이 느껴졌었는데, 미국 퍼듀 대학교에 가서 4개월동안 많은 사람을 만나고, 이야기를 듣고, 현지 교수님과 함께 프로젝트를 하다 보니 충분히 ‘나’는 미국에서 제 몫을 다하며 연구하고 생활할 수 있으며, 미국 대학원에서 공부하는 것은 꿈꾸기만 하던 이상향이 아니라 스스로 노력을 통해 닿을 수 있는 현실임을 체감할 수 있었습니다. 흔히 말하는 세상을 보는 시야가 넓어진다는 것이, 상상만 할 수 있던 일들이 나의 현실이 될 수 있음을 인지하고, 앞으로 살아감에 있어 더 넓은 세상의 일들을 고민하고 고려하여 삶에 반영할 수 있게 되는 것임을 깨달았습니다. 그런 의미에서, 저는 이 프로그램을 통해 더 넓은 세상을 볼 수 있게 되었습니다. 이 시야를 가지고 더 넓은 세계에 끊임없이, 고민없이 도전할 것입니다. 이 프로그램은 제게 단순히 인생에서 한번 두고두고 회자할 좋은 추억이 아니라, 더 넓은 세상에서 더 많은 추억들을 만들게 해줄 첫 발자취라고 생각하며, 앞으로 변화된 삶을 살아갈 것입니다.


온전히 프로젝트에만 집중할 수 있던 환경 
제가 K-SW Square Fall 프로그램에 지원하며 가장 기대했던 부분은 온전히 프로젝트에 집중할 수 있는 환경이 제공된다는 것이었습니다. 그동안 대학 생활과 학부 연구생 생활을 겸하며 개인 연구에 더 집중하고 싶어도, 매일 들어야 하는 수업, 중간고사, 기말고사, 수업 중 팀 프로젝트와 보고서 등 때문에 시간이 없어 하지 못하던 저에게는 최고의 환경이었습니다. 퍼듀 대학교에서는 매일 오전 9시부터 오후 5시까지 총 6~8 명의 팀원들과 함께 4개월간 프로젝트를 진행하며, 간간히 프로젝트나 논문작성에 대한 교수님 혹은 조교님의 피드백을 받을 수 있습니다. 이번 기수의 경우 프로젝트 주제를 마음대로 정할 수 있었어서, 제가 평소 관심있던 주제를 하게 되어 더욱 즐겁게 연구를 했다고 생각합니다. 본 프로그램에서는 학생이 온전히 프로젝트에 집중을 할 수 있도록 식사와 주거를 포함해 많은 것을 지원해 주는데요, 프로젝트 진행을 위한 공간 뿐 아니라, 프로젝트에 필요한 물품까지도 지원을 해줍니다. 예를 들어 프로젝트를 위해 드론이 필요한 팀에게는 드론을 사주시고, 저희 팀의 경우에는 테스트를 위한 안드로이드 폰이 필요하여 지원을 받았습니다. 하드웨어 뿐 아니라 소프트웨어 적인 지원 또한 해주시니, 하고 싶은 연구가 있으나 연구에 필요한 물품 지원을 받지 못하던 분들에게는 정말 좋은 기회가 될 것이라고 생각합니다. 식사에 대해 말하자면, 점심 및 저녁식사는 1주일에 8번 학식 카드를 쓸 수 있도록 넉넉히 지원을 해주시고, 1달에 한번 정도 다같이 마트에 가서 필요한 식료품 등을 살 수 있도록 데려가 주십니다. 주거 또한 1인 1실, 4인 1룸으로 개인 공간을 고려하여 배정해 주십니다. 이렇게 기본 생활에 필요한 식, 주를 모두 지원해주고 프로젝트를 위한 공간, 필요한 물품들을 지원해 주시니 낯선 타지에서도 마음 놓고 제가 하고싶던 연구에만 집중할 수 있었습니다. 4개월동안 온전히 집중하며 매일 팀원들과 프로젝트 방향성에 대해 논의하고, 아이디어를 제시하고, 한 주제에 대해 다양한 관점으로 바라보며 토의하고, 문제 상황을 해결하려 고민하고, 함께 연구를 했던 경험은 제게 귀중하고 소중한 경험으로 남을 것 같습니다. 프로그램 내내 모두가 열심히 할 수 있었던 것, 끝내 하나의 프로젝트를 완성하고 논문까지 쓸 수 있었던 것은 퍼듀 대학교에서 만들어준 좋은 환경 덕분이었다고 생각합니다.
‘나’ 를 더욱 성장시킨 경험
저는 저희 팀의 리더이자 1저자로써 4개월간 교수님, 조교님과 컨택하며 프로젝트를 이끌어왔습니다. 중요한 직책을 두 개나 맡은 만큼 내가 잘해야 한다는 부담감이 조금은 있었고, 가끔 프로젝트가 잘 풀리지 않을 때에는 걱정스런 마음에 힘들어 하기도 했는데, 결국에 하나의 프로젝트를 성공적으로 끝내고 논문을 쓸 수 있었던 건 모두 훌륭한 팀원들 덕분이라고 생각합니다. 4개월동안 6명의 팀원들과 매일매일 의견을 나누고 소통하며 여러 분야에서 저의 부족한 부분들을 느낄 수 있었고, 그 덕분에 정말 많은 것들을 배웠습니다. 예를 들어 한 팀원에게는 데이터 분석을 할 때 한 가지 목표만 보고 빠르게 진행하려다 디테일한 부분들을 놓칠 수 있는 점, 데이터를 단순히 분석하는 것 뿐 아니라, 데이터를 ‘들여다 보는 것’의 중요함을 배울 수 있었습니다. 또 다른 팀원에게는 리더로서 제게 부족했던 세심하게 팀원들을 챙겨주는 모습들, 또 현재 상황에 안주하지 않고 끊임없이 더욱 효율적이고 좋은 선택지를 찾으려 노력하는 모습을 배웠습니다. 이렇게 배울 점 많은 팀원들을 만나서 도움을 받고, 저의 부족한 점을 통해 더 배우고 성장하려 노력하였기 때문에, 또 동시에 저의 장점을 최대한 활용하며 팀을 이끌었기 때문에 교수님께 칭찬을 받은 좋은 프로젝트를 완성할 수 있었던 것 같습니다. 이러한 경험과 배움을 앞으로의 삶에도 잘 녹여내서, 더 세심하고 꼼꼼한, 깊은 연구를 하고, 더 좋은 리더의 모습으로 성장하고 싶습니다.
 
’나’ 를 더욱 이해할 수 있던 경험
퍼듀 대학교에 오면 생각보다 많은, 다양한 유형의 사람들을 만나게 됩니다. 외국인을 포함하여 함께 이 프로그램을 신청한 한국인 학생들과 4개월 내내 함께 생활하기 때문인데요. 저의 경우에는 총 38명이 함께 이 프로그램을 통해 미국에 왔고 24시간 내내 함께 먹고 자며 생활을 하였습니다. 사실 고등학생때 이후로는 이렇게 많은 친구들과 하루종일 붙어있으며 생활할 기회가 없었는데, 이번에 함께 생활을 하면서 많은 유형의 사람 중, 내 스스로가 어떤 사람인지를 더 잘 이해할 수 있었다고 생각합니다. 이 프로그램은 단순히 한국의 대학교에서처럼 수업 중에 짧게 팀 프로젝트를 하고, 공부하는 것이 아니라, 미국에서 매일 프로젝트를 하며 의견을 나누고, 함께 여가 시간을 보내고, 여행을 다니고, 생활하는 프로그램입니다. 그렇기 때문에 생각되는 것보다 이벤트들도 많이 발생하고, 때로는 갈등상황도 있습니다. 이렇듯 많은 상황들 속에서 다양한 사람들의 성격을 관찰하고, 특정 주제에 대한 다양한 의견과 생각들을 들으며 그 인간관계 속에서 깨닫게 되는 것, 느껴지는 것들이 많았습니다. 이러한 과정에서 저는 혼자 생활할 때는 잘 모르던, 제 자신이 어떠한 사람인지를 알게 되었습니다. 타인과 비교했을 때의 나의 단점, 나의 강점들이 보이니 어느 부분을 더 보완 해야 할지, 어느 부분을 통해 나라는 사람을 어필할 수 있을지를 알게 되었습니다. 비단 프로젝트 경험의 향상 뿐 아니라, 나 자신을 찾는데에서도 도움이 된 프로그램이었다고 생각합니다.  
 
다채로운 퍼듀 생활
 퍼듀 대학교에는 정말 생각지도 못하던 많은 활동들이 있었습니다. 프로그램을 담당해주시는 현지의 교수님과 조교님께서 저희에게 되도록 많은 것을 경험하게 해주려 노력해 주십니다. 이 프로그램의 목적은 연구와 공부가 아니라 ‘배움과 경험’ 이라고 하신 교수님의 말씀대로, 저는 되도록 미국에서 많은 것을 경험하고 느끼고자 친구들과 함께 이런저런 활동을 찾아가며 참여하였습니다. 컴퓨터 공학과 관련된 기업들이 와서 회사를 홍보하고 채용 및 인턴쉽 기회를 설명하는 Computing Career fare, Tesla 인턴 설명회, 잔디밭에서 종종 구경했던 소규모 공연들, 롱보드 동아리, 스쿼시, 테니스, 배드민턴, 클라이밍, 줌바 댄스, 바디펌프, 크루즈에서 본 야경이 너무 아름다웠던 시카고 여행, 퍼듀 대학교 150주년 기념행사를 구경한 것, 인생 첫 풋볼 경기 관람, 할로윈 시즌에 유령의 집에서 자원봉사 했던 신기한 경험, 할로윈을 맞아 호박을 열심히 팠던 것, 코스튬 입고 갔던 할로윈 클럽, 교수님 농장에 가서 바비큐 파티를 하며 본 별들, 4일동안 진행된 기업가 세미나에서 열심히 참여해줘서 고맙다며 주신 선물, 단체로 미국 영화관 갔던 것, 뉴욕 여행가서 본 브로드웨이 뮤지컬, 친한 외국인 친구를 만들게 된 영어 스피킹 수업, 농구 경기 관람, 10박 11일동안의 장기 로스앤젤레스 및 라스베가스로의 미국 서부 여행, 블랙 프라이 데이에 LA의 한 아울렛에서 줄을 서가며 쇼핑했던 것, 팀원들이랑 다같이 크리스마스 쇼 합창을 보러 갔던 것, 청소검사가 끝나고 스테이크 파티했던 것, 영어로 논문을 쓰고 발표를 한 것, 부시 대통령 연설을 구경한 것, 한국 음식이 그립다며 룸메이트들과 이것저것 함께 요리한 것, 크리스마스때 과자집 만들기 대결했던 것 등등.. 퍼듀에서의 생활은 여기에 다 담지 못할 정도로 정말 다채로웠고, 모든 순간이 행복하고 즐거운 추억으로 남았습니다. 이런 경험을 또 어디서 할 수 있을까요. 이 글을 읽는 여러분도 좋은 기회로 해외 프로그램에 선정되어 파견을 가게 된다면, 해외에는 찾아보면 정말 많은 신기하고 재미있는 많은 이벤트들이 있으니 잘 찾아보고 많은 것을 경험하고, 누리고 오셨으면 좋겠습니다.
 
앞으로 달라질 나의 삶
저는 이번 프로그램 기간동안 최선을 다해 연구하고, 즐기다 왔다고 생각합니다. 모든 생활에 최선을 다해 임했다는 믿음을 바탕으로 현지 교수님께 미국으로의 대학원 진학을 위한 추천서, 조언 등을 부탁드린 후 긍정적인 답변을 받았고, 조교님께서도 저라면 미국에 와서 잘 공부할 수 있을 것이라며 응원해 주셨습니다. 이러한 조언과 격려, 응원들은 제게 미국 대학원을 준비하고자 하는 의지와 해낼 수 있다는 믿음이 되었습니다. 저는 이 기회를 살려서 앞으로 미국 대학원에 가서 박사까지도 더 공부하고자 합니다. 성장하는 삶, 많은 것을 배우는 삶, 관심있는 분야에 깊이 연구하는 삶을 살고 싶습니다. 저는 이 프로그램을 통해 같은 분야를 공부하고, 같은 추억을 쌓은, 서로의 성장에 도움을 줄 수 있는 38명의 좋은 학우들을 얻었고, 외국인 친구들과 얘기하며 영어로 현지인과 원활한 의사소통이 된다는 자신감을 얻었고, 많은 이벤트들과 여행을 통해 잊지못할 많은 추억을 만들었으며, 영어 논문 작성 및 발표의 경험을 통해 앞으로도 해외 학회에 논문을 낼 수 있겠다는 자신감을 얻었습니다. 이 프로그램에서 경험한 것들과 만난 사람들을 통해 저는 한층 성장했다고 생각하고, 앞으로도 저는 믿음과 자신감을 갖고, 꾸준히 성장해 나갈 것입니다. 미국에 있는 동안 프로젝트 및 저희의 생활을 많이 도와주고 가르쳐 주신 교수님과 조교님, 그리고 한국에서 저희를 응원해주신 이호진 교수님께 정말 감사하다는 마음을 전해드리며 후기를 마칩니다.


참고로 담당 교수님과 지도 박사과정님께서 미리 공지해주신대로 하지 않고 멋대로 하는 경우가 종종 있어서 혼나는 경우를 여럿 봤다.
더 이상 그런 친구들이 혼나는걸 원치 않고, 또 교수님들도 우리때문에 스트레스 받아하시는걸 두고볼수 없어서 안내사항을 정리해둔 문서(노션페이지)를 만들어 배포했었다.
모두가 함께 작성하고 관리하자, 다같이 이걸 꼼꼼히 읽고 이대로 하자고 만들었던 문서였지만 다들 작성하질 않더라. 나는 안내사항이 있을 때 마다 꾸준히 관리한다고 적긴 했는데.. 내가 적은 내용들을 잘 활용했는지는 모르겠다.
https://comfortable-record-9c7.notion.site/9d1be474892e472a808d53cf8af0bd3a?v=5e1fdbf99ab54a4784483279cb8a77c8&pvs=4 

 

K-SW Program rules

우리 모두가 작성하고 편집하는 문서에요.

comfortable-record-9c7.notion.site

다음에 가는 친구들이 있다면 이 문서를 보고 도움을 받길 바란다.
해당 문서는 2022년도 기준이며 안내사항이 달라졌을 수 있으니 참고만 하길 바란다.. 
개인적으론 해당 문서가 계속 업데이트되어 2023,2024 년도.. 쭉 이용되었으면 하는 마음도 있지만
아마 적극적으로 적을 친구들이 없을 것 같아 편집 금지로 해두었다.
 
그리고.. SW중심대학 사업단에서 진행했던 소중인의 생활탐구 V-log 공모전!
퍼듀의 일상을 담은 영상을 만들어서 현이랑 참여했는데 대상을 받았다. 만세~.~


아래 영상 링크를 첨부했다. 퍼듀에서 우리가 어떤 생활을 했는지 한 눈에 알 수 있을 것이라 생각된다!
https://youtu.be/2wngQG65Noo

 
그럼 다음 기수도 파이팅!
 

 

가상환경 새로 만들때 

1. 가상환경 만들기

conda create -n <가상환경이름> python=<파이썬버전>

env list : 가상환경 목록 확인

conda activate <가상환경이름>

2. pip 설치 및 requirements.txt 설치

conda install pip

pip install -r requirements.txt (기재된 패키지 설치)

pip freeze > requirements.txt (가상환경에 설치되어있는 패키치 txt 파일로 저장)

3. jupyter-notebook 에 가상환경 연결 

pip install jupyter notebook 

pip install ipykernel

python -m ipykernel install --user --name <가상환경이름> --display-name <주피터에서 볼 이름-지정>

jupyter notebook 들어가면, new 에서도 커널 바꿀 수 있고/ 파일 들어가서도 kernel 탭 > Change kernel 에서 변경가능

4. 분석 완료 되었을때쯤 늘 requirements.txt 추출해놓고, 간략하게 파일에 대한 description 정리, 하드디스크에 넣어두기.

pip freeze > requirements.txt (가상환경에 설치되어있는 패키치 txt 파일로 저장)


기존에 있던 아나콘다 가상환경 다른곳으로 복사 옮기고 싶을때 

1. Conda env 를 yaml 파일로 export 하기 

conda activate envconda # 가상환경 이름이 envconda 일때
conda env export > envconda.yaml

2. yaml 파일로 콘다 환경 생성하기 

If you try to create anaconda environment to another machine, you should edit the envconda.yaml file's prefix to the another machine's anaconda3 directory. 

conda env create -f envconda.yaml
conda activate envconda

tip) If you encounter the "Resolve Package Not Found" error, remove the printed library list from the envconda.yaml file and re-try it. 

# 참고: 서버에서 로컬머신으로 업로드, 다운로드 하는법

다운로드 : scp  사용자명@서버주소:서버파일경로  로컬저장경로

scp user@remote.com:/home/test.txt /home/test.txt

-> 접속포트 지정 : -P 옵션 사용

-> 키 사용해 접속 : -i 옵션 사용

-> 폴더 다운로드 경우 : -r 옵션 사용 

업로드  scp  로컬파일경로  사용자명@서버주소:서버저장경로

scp /home/test.txt user@remote.com:/home/test.txt

tip) If it doesn't work for some reason, then just open the yaml file and copy&paste all library to the new file on the machine you want to use. kk


그 외

1. 가상환경 삭제 (문제 생겼을때 대비)

conda env remove -n envconda

2. 같은 머신 내에서 가상 환경 복사

conda create -n envconda_copy --clone envconda 

3. conda default version update command

conda update -n base -c defaults conda

 

git status : 현재 상태 확인

git clone <repository.git (HTTPS link copy)> or git clone --branch <mybranch> <repository.git (HTTPS link copy)>

(현재 위치한 디렉토리에 clone 한 폴더 생성됨 -> 실제 노트북에서 확인 가능, 들어가서 파일수정/추가/삭제)

cd <> <>... 

(git bash 터미널에서 clone 한 폴더로 이동하기. 고치고 싶은 가장 낮은 단위?)

git commit -m "<message">

(add 어떤거 어떤거 하라고 알려줌)

git add <file> 

git commit -m "<message>"

git remote -v : 현재 연동된 repository 확인

git push or git push origin <branch> 

 

그 외

git reset 기존이력 지우고 다시시작 (ex git reset origin/main)

git lfs track "*" 현재 디렉토리의 모든 대용량 파일을 트랙함

 

대용량 파일 사용하고싶을때는 Git Lfs 를 쓰는데

lfs 라이브러리 다운로드하고 대용량파일을 tracking 하게끔해서 업로드 하면 됨

만약 push 하다가 용량이 부족하다고 하면 github 에서 추가 데이터팩 구매해서 사용하면 됨 (50기가 저장당 5달러/ 월마다 정기결제/ 다운그레이드 가능)

근데 lfs 도 개별 파일 최대 용량 2GB 임. 

따라서 개별 파일이 2기가 넘는다면 압축을 하던가 아니면 git lfs 가 커버해줄수없으니 다른걸 사용해야함

만약에 자신의 계정이 github team 이상이라면 개별 파일 최대한도 4기가 였던거로 기억함

 

나는 요즘 CAD/CAM 수업을 들으면서 팀 프로젝트를 하고 있다. (이번학기 팀플만 3개.. +그외 개인연구/프로젝트 다수 ㅠㅠ)

주제 선정, 프로젝트 설계 및 제품 분석, 기초 디자인을 마치고.. 이제 직접 3D 모델을 만들어야 했는데,

이번에는 3Dexpeirnece의 Part Design(CATIA) 을 이용해 3D 모델을 만들었다.

내가 맡은 부분은 Lim(바퀴 안쪽몸체), Tire(바퀴 타이어)이다. Lim과 Tire가 합쳐지면 Wheel 이 된다. (나중에 전체 프로젝트가 완성되면 Proposal 부터 Final report 까지 정리해서 올릴수도 있을것같다.)

이걸 구현하기까지 정말x1000000000 많은 시간을 들였다. 왜냐하면... 프로그램 설치 단계에서 작동 단계에 이르기까지 에러가 끊임없이 발생했기 때문이다. 

 

겪은 에러1. 프로그램 설치가 3Dexperience 설치까지는 되는 것 같은데, Part design 을 설치하려고 하면 자꾸 다음 단계로 넘어가질 않았다. 설치가 안되니 모델링은 커녕 프로그램이 어떻게 생겼는지 보지도 못한다... 

에러1 해결 -> 팀 프로젝트를 해야해서 n일에 걸쳐 nn시간동안 설치 오류 관련해서 정말 인터넷을 다 뒤졌다. 기본적인 네트워크 설정이나 방화벽, 포트 번호 확인하고 인바운드 아웃바운드 규칙 바꾸기, 속성 및 영역 재설정, 포트포워딩 등등... 안해본게 없다. 근데도 안돼서 어쩔 수 없이 다른 컴퓨터로 했다. 근데....... 다른 컴퓨터로 해도 똑같이 안되는 것이다........... 희망을 갖고 다시 인터넷을 검색해서 할 수 있는걸 해봤더니 이 컴퓨터는 정상적으로 다운로드 되더라. 설치까지 정말 많은 시간이 들어갔다.

 

겪은 에러2. 드디어 프로그램이 설치가 돼서, 모델을 만들어보려고 했는데 이상하게 내가 원하는 대로 도구가 작동하지 않았다. 나는 초심자니 내가 뭔가를 잘못하는줄 알고, 어떻게든 만들어보겠다고 이것저것 다 클릭하면서 비슷하게나마 만들어갔는데.... 그런데 정말 대부분의 도구가 동작을 안해서 도저히 불가능했다.... 거의 8시간을 니가이기나 내가이기나 해보자고 끙끙대다가, 이건 내 문제가 아니라 프로그램 문제라고 판단을 했다. 결과적으로 프로그램이 이상한게 맞았다.

에러2 원인 및 해결 -> 3D experience가 하필이면 내가 한창 다운받고 모델을 구현하려할때 서비스 점검을 했던 것 같다. 나 말고도 다른 팀원들이 모두 3D experience 가 작동이 안되거나 작동이 이상하게 된다고 하더라... 난 그것도 모르고....... 또, 하필 내가 다운받은 버전이 옛날 버전의 프로그램이었고, 최신 버전을 쓰지 않아서 기능이 작동하지 않는 이유도 있었다. 시간이 어느정도 흐르고, 프로그램을 업데이트 해주니까 정상 작동했다. 

 

겪은 에러 3 -> 내가 구현한 모델의 특정 선 등을 삭제해주는 remove 기능이 작동을 안했다. Trim 까지는 잘 되는데 삭제가 안된다.... 마우스 우클릭 delete도 안되고 온갖 버튼 클릭을 다 해봤는데 삭제가 안된다. 그러다보니까 내가 원하는 모양을 구현할수가 없고 padding 해줘야 하는데 오류가 났다. remove 없이 어떻게든 하려고 하다가 2시간 날렸다.

에러3 해결 -> delete 키를 쓰면 됐다. 물론 delete 키를 쓰는 것도 맨 처음에 해봤는데.... 그땐 안됐다. 이유는 내 노트북 키보드가 delete 키가 맛이 가서 였다. 처음알았다..... 스페이스바도 맛이 갔는데 이제는 delete키도 맛이 갔구나. 컴퓨터를 바꿀 때가 온 것 같다. 다행히 블루투스 키보드가 있어서 이 키보드의 delete키를 썼다.

 

이렇게 설치문제, 기능작동문제, delete 키 문제를 해결하고.... 드디어 내가 원하는 대로 프로그램 도구들이 작동하기 시작하니 너무 감격스러웠다. 프로그램을 정상적으로 쓸 수 있다는게 이렇게 감격스러울 줄이야... 에러를 겪을때는 내가 이걸 설치할 수 있을까? 어떤 방법을 해도 설치가 안되는데? 하기도 했고 도구상자가 안먹힐때는 시간도 없는데 대체 왜 나는 내가 생각하는 기능을 쓸 수 없는건가 나는 모델링을 엄청 못하나 우울하고 스트레스 받기도 했고.. delete 키가 안먹혔을때는 대체 에러가 언제쯤 끝날까 내가 정상적으로 이 프로그램을 쓸수는 있을까 다른 기능도 다 에러있는거 아닌가 생각이 들었는데....

진짜 오기와 집념, 될때까지 한다는 마음으로 하니까 만들어지긴 만들어지는구나... 어제오늘 정말 에러 해결하겠다고 열심히 살았다... 생각해보니까 노트북 대신 프로그램을 설치해둔 컴퓨터가 집에서 멀리있어서 원격으로 데스크톱 연결해서 프로그램을 이용했어야 했는데.... 그와중에 원격 데스크톱 연결도 계속 오류나서 그것도 해결한다고 시간을 많이 썼다. 아침부터 가서 해결하고 오고... 바로 다음일정 가고.... 

그래도 마감 시간 안에 팀 프로젝트를 끝내서 마음이 놓인다.

사실 이거말고도 아직 할게 너무나 많이 남았는데........ 지금은 그냥... 나를 매우 스트레스 받게하던 일을 끝냈다는 거에 기뻐하고 싶다.  

 

아래는 내가 이번에 처음으로 만들어본 휠이랑 바퀴... 처음 만든거치고 꽤 괜찮아 보여서 만족한다.

이것도 뭐 어떻게 쓰는 지도 모르고 하나 하나 기능 눌러보고 인터넷 찾아보면서 멘땅에 헤딩했는데... 

모델링 해보기도 전에 에러를 너무 많이 겪다보니까.. 마음이 굉장히 지쳐있었어서.. 모델링 하는건 일도 아니었다.

처음부터 에러 없이 잘 됐으면 고생 안하고 충분한 시간 써서 더 완성도 있게 마무리했을텐데...ㅠㅠ

SW를 하고싶다면 이런거에 익숙해져야지 어쩌겠나는 생각도 든다.

Wheel 부품 중 하나인 Lim// 안쪽은 60mm, 바깥쪽은 150mm

 

Wheel 부품 중 하나인 Tire// 안쪽은 150mm, 바깥쪽은 200mm

 

Assembly!

 

바퀴축에 합체!

 

다른 팀원 분들이 만들어오신 파츠랑 합체!

 

제일 마지막에 올린 사진이 우리 팀의 최종 완성본이다. 나중에 보고서랑 같이 업로드할 기회가 있겠지.!! 

이제 3D printing 만 하면 이번 수업 팀 프로젝트도 끝이네.

인터넷 찾아가면서 하다보니 이제 어느정도 3Dexpeirnece 기능도 알겠고.. 막연한 두려움도 많이 없어졌다.

3D 모델링 대체 어떻게 하는걸까 궁금했는데 첫 발을 내딛은 것 같아 기쁘다. 은근히 재미있기도 하고 

수업이 끝나도 가끔 시간날때 취미생활로 즐기기 좋을 것 같다!

 

안녕하세요.

최근에는 6전공 중간고사 기간이어서 다른걸 건들새도 없이 바빴는데, 

오늘은 시험과 시험 사이에 잠깐의 여유가 생겨서 NVIDIA에서 주최한 제 1회 HCLS Summit Korea 2022 온라인 강연을 들을 수 있었습니다! 😀 (HCLS : Healthcare & Life Science)

HCLS Summit Korea 2022?

NVIDIA와 서울대학교병원이 공동으로 주최하는

헬스케어 분야의 최신 AI 애플리케이션 및 프레임워크에 대한 강연, 연구 발표 및 실습 워크숍

http://hcls.okld.co.kr/?mkt_tok=MTU2LU9GTi03NDIAAAGEAl3WaWxK_qyvS01QbKIwBg66pGt8OuDIggPyIzc6QfzIExu8Ky4IhdtxgL7YwubZ2dRZw5tetJcNLybVDVGZIfOWIvz4k88PRoqIsd7Kb3eb815AxQ 

 

HCLS Summit Korea 2022

엔비디아와 서울대학교병원과 공동으로 헬스케어 및 생명과학분야의 HCLS (Healthcare & Life Science) Summit Korea 2022를 개최합니다.

hcls.okld.co.kr

이번 강연은 헬스케어 분야의 최신 AI 애플리케이션 및 프레임워크에 대한 강연(= 최신 NVIDIA 애플리케이션 소개), 연구 발표, 데모 등 다양한 세션으로 구성되어 있습니다. 파트1은 헬스케어 및 생명과학 분야의 AI, 파트 2는 딥러닝으로의 의료 연구 가속화, 파트 3은 바이오 및 임상분야의 AI 를 다룹니다. 상세 정보는 다음과 같습니다.


파트 1: 헬스케어 및 생명과학 분야의 AI

  • 세션 1(AI와 생명과학의 융합): NVIDIA의 글로벌 헬스케어 리더들과 함께 NVIDIA 최신 기술과 생태계의 혁신, 향후 의료 서비스의 미래에 대해 알아봅니다. 
  • 세션 2(딥 러닝과 영상 의학): 딥 러닝의 핵심, 생명 과학 분야의 획기적인 애플리케이션과 더불어 NVIDIA 컴퓨팅 플랫폼이 고성능 딥 러닝 시스템의 개발을 지원하는 방법을 소개합니다. 
  • 세션 3(연구개발 혁신을 위한 오픈소스 기반 구축하기):  의료 이미징을 위한 개방적 혁신을 이끄는 ‘프로젝트 MONAI’와 연합학습 플랫폼인 NVIDIA FLARE가 의료 분야에서 고립된 데이터 문제를 극복하고 협업, 개인 정보 보호 AI 모델을 구축하는 데 어떻게 중요한 역할을 하는지 공유합니다. 
  • 세션 4(SNUH 연구발표 – 임상의가 바라보는 AI): 실제 연구 사례와 함께 임상적으로 새로운 정보를 제공할 수 있는 AI 모델에 대해 논의합니다. 

파트 2: 딥 러닝으로의 의료 연구 가속화

  • 세션 1(HCLS 워크로드를 위한 가속화 컴퓨팅(GPU 컴퓨팅 플랫폼)): 참석자들이 의료 분야의 저전력 임베디드 기기부터 데이터센터에 이르기까지 실제 활용 사례를 공유하면서 다양한 문제를 해결하기 위한 올바른 솔루션을 올바른 이해를 돕습니다. 
  • 세션 2(연합 학습을 통한 의료 AI 및 연구 혁신): 안전한 분산형 멀티 파티 협업을 지원하는 오픈 소스 플랫폼인 NVIDIA FLARE를 핸즈온 레벨에서 소개합니다. 연합 애플리케이션을 신속하게 개발할 수 있는 주요 기능과 워크플로우와 더불어 플랫폼의 실제 적용 분야에 대해 논의할 예정입니다.
  • 세션 3(SNUH 연구발표 #2 – 연합학습 관련 연구 사례): 실제 의료 환경에서 개인 정보 보호를 위한 의료 데이터 연합 학습 연구 발표를 진행합니다. 

파트 3: 바이오 및 임상 분야의 AI

  • 세션 1(생명과학을 위한 인공지능: 단백질 구조 예측의 미래): 인간의 언어를 이해하기 위해 개발된 자기 지도방식의 자연어 처리 모델은 최근 단백질과 같은 생체 분자의 구조와 기능을 이해하고 예측하는 데 도움이 되고 있죠. 본 세션은 이와 관련해 최근 몇 가지 업데이트와 모델 아키텍처를 리뷰하고 생명과학 산업 발전에 필요한 툴, 기술 및 인프라를 살펴봅니다. 
  • 세션 2(바이오메디컬 및 임상 분야의 지식 추출 및 검색): NVIDIA가 지원한 고유한 임상 음성 및 텍스트를 위한 도메인별 트랜스포머 NLP 모델 아키텍처 프로젝트를 공유하고, 지식 추출 파이프라인을 통해 약물 대상 식별 및 우선순위 지정, 임상 시험의 구조화, 의료 코딩 및 엔터프라이즈 서치와 같은 다양한 사용 사례를 어떻게 지원하는지 보여줍니다. 
  • 세션 3(SNUH 연구발표 #3 – Bio 관련 ML/DL 연구 사례): 정상인과 코로나 확진자들의 생명자원을 분양 받아 생성한 7개 종류의 멀티오믹스 데이터(scRNA-seq(BCR/TCR), Cytokine Profiling, Bulk TCR/BCR-seq, SNP array, WGS, HLA-typing, COVID-seq)를 통합 분석하고 정상인, 경증 및 중증환자 분류모델을 개발하고자 합니다. 코로나19 세포 반응(COVID-19 cellular response) 네트워크를 통해 중증도 예측 그래프 신경망(GNN) 모델을 구축하고, GNN 결과에 대해 설명가능한 인공지능(explainable artificial intelligence, XAI)을 활용하여 바이오마커 후보를 발굴하고 생물학적 의미를 도출하고자 합니다.

해당 강연의 모든 세션이 제가 관심있는 부분이어서 강연을 듣게 되었습니다. 

강연 신청을 조금 늦게해서 별도의 참여 링크 없이 NVIDIA korea 유투브로 들을 수 있었고, 오전 10시부터 오후 5시까지 다양한 주제로 강연이 진행되었습니다.

강연이 자막 없이 영어로 스피디하게 진행되어서 내용을 완벽히 이해하기 힘들었기에, 최대한 내용을 기록해두고 나중에도 차근차근 다시 읽어볼 목적으로 글을 남깁니다.

각 강연의 내용(PPT)과 함께 해당 세션의 사전 질문 내용과 답변을 기록해두었습니다. 모든 내용이 기록되어있는것은 아니며, 일단은 PPT만 기록해두었는데 추후에 시간이 되면 간략한 보충글도 적어볼 예정입니다.

 


 

개회사

 


 

Part 1. 헬스케어 및 생명과학 분야의 AI

1-1. AI 와 생명과학의 융합/ 르네 야오

 
 
1-2. 딥 러닝과 영상 의학/ 싯다르트 코트발
 
 
DNN(feed-forward), CNN, RNN, Transformers. Graph Neural Networks, GAN
 
[사전질문 및 답변]
 
(사전질문1) 대부분의 인공지능은 설명할 수 없습니다. 의학 영상에서 가장 중요한 것을 설명할 수 있는 가능성입니다. 인공지능의 신뢰성을 어떻게 극복해야 하는지 조언해주시면 감사하겠습니다.
 
(사전질문1 답변) AI 모델의 설명에 대한 연구가 있는데, 이것은 사람들이 모델이 정말로 그들이 기대했던 대로 학습하는지 이해할 수 있도록 도와줍니다. 또한 트레이닝에 다양한 데이터를 사용하면 모델의 신뢰성이 향상될 수 있습니다.
사전질문2) 디지털 X선, CT 및 MR과 비교했을 때, 높은 실시간/낮은 지연 요구 사항이 있는 초음파 영상은 딥 러닝의 적용이 제한적일 수 있습니다. 특히 고성능 HW를 장착할 수 없는 핸드헬드 초음파 영상 장비의 적용 가능성은 얼마나 됩니까?
(사전질문2 답변) NVIDIA에는 휴대용 기기에 사용할 수 있는 HW 플랫폼이 내장되어 있습니다. 또한 TRT 및 Triton과 같은 몇 가지 SW 최적화 도구를 사용하여 고성능 없이 DL 애플리케이션을 HW에 적합하게 만들 수 있습니다.
(사전질문3) 딥 러닝의 문제는 계산하는데 오랜 시간이 걸린다는 것입니다. 우리는 현재 NVIDIA의 고급 GPU를 사용하는 것을 선호하지만, 앞으로는 더 빠른 양자 컴퓨터를 보게 될 것입니다. NVIDIA의 양자 컴퓨팅 계획은 무엇입니까?
(사전질문3 답변) NVIDIA는 양자 컴퓨팅에 관한 몇 가지 작업을 가지고 있습니다. 우리는 방금 GPU에서 양자 시뮬레이션을 하는 데 사용할 수 있는 cuQuantum이라는 SDK를 발표했습니다.
 
 
1-3. 연구개발혁신을 위한 오픈소스 개발 / 프레나 도그발
 
 
 
 
 
[사전질문 및 답변]
 
 
(사전질문 1) 한국에서 FLARE 적용사례가 있는지 궁금하고, 의료 분야에서 federated learning 적용시 기술과 제도적인 관점에서 이슈가 되는 사항들이 어떤게 있는지 궁금합니다
 
(사전질문 1 답변) NVF:ARE 2.0은 공개 소스 프레임워크로 구현됩니다. https://github.com/nvidia/nvFlare와 핸즈온 데모 URL은 다음과 같습니다. https://www.youtube.com/watch?v=Z-qiG...
 
(사전질문 2) MONAI 와 NVIDIA FLARE 사용에 따른 강점이 궁금합니다
(사전질문 2 답변) 이 두 개의 프레임워크는 GPU 가속화에 의해 지원됩니다.
(사전질문 3) 의료 영상 AI 개발을 위해 국제적 연구 협력할 때, 학습 데이터를 다 수집한 후에 MONAI를 사용하게 되는지, 아니면 연구 초기부터 활용할 수 있는 요소가 있는지요? 비용과 데이터 교환/공유를 위한 보안은 어떻게 준비되어있는지요?
(사전질문 3 답변) 또한 MONAI를 사용하여 학습하기 전에 MONAILabel을 사용하여 데이터 레이블을 지정할 수 있습니다.
 
 
 
1-4. Development AI reshaping medical approach by providing new insights/ 최홍윤 교수
 
 
 
단순 보조 진단 AI는 지속가능X 
우리가 제안한 것을 토대로, 정량적 수치를 제안했을때, 어떠한 임상적 개선(평가자간 차이)이 있을것인가 입증하는게 중요 (단순 모델의 정확도 보다)
 " 지속가능한, Commercial level medical AI" 여야 한다.
= Clinical practice 에 영향을 끼칠 수 있으면서 Commercial level 로 이어질 수 있는 AI
1) 환자가 지불
2) 의료진 인건비 감축
 
 "Per practice model"로 흘러가야한다. 새로운 정보의 도출 필요 - 환자가 지불 가능한 AI, 진단을 대신 해주거나 Biomarker 제시 
 "예후 예측, 기존 인간 판독 불가능한 정보 도출, 기존 고가 검사를 대체" <- 지불 가능한 의료 영역의 AI
 
"우리의 AI 를 이용해서, 임상에서 어떠한 긍정적인 변화를 줄 수 있을 것인가?"
새로운 정보 ex >> "예후와 관련된 정량적 평가모델"
 
Where is New information/New biomarker?
 
Clinical & Practice 어떻게?
1. New information
- redefine diagnosis
같은 파킨슨 병 질환자이어도 서로 다른 sub-type 이 존재했다 는 것을 보여줌. 
sub 그룹 찾아냄 -> 특정 약에만 반응하는 sub 그룹 -> 특정한 집단에 대한 새로운 신약, 임상시험이 가능 -> 성공율 향상
 
임상적 환경에 따라 AI 가 접근하는 방식이 달라질 수 있음. 
질병(알츠하이머) vs 정상 -> 잘 구분하는 모델. 과연 잘 적용될지?환자가 올때 다양한 질병을 갖고 옴.
정상인 distribution 만 나이대별로 구현 -> 그 외 비이상 환자들 감별 가능 (분류는 아니지만, 광범위한 형태의 모델)
 
 
- find Unknown things
 
Biomarker 패턴 찾기. 비침습적으로 예측한 biomarker -> 면역항암 예측 등.
뇌영상 -> 정성적이 아닌, 정량적인 objective signature score -> 다양한 기능 수행 가능 
 
 
- rethink Data features. 
Image is not image.
의료 영상들은 모두 connection이 되어 있다.
한 사람에게도 다양한 data 존재
레이블 작업 없이 만들기
 
서로다른종류 multimodal 합쳐서, 유용한 insight를 찾음으로써 유용성..
 
사람이 레이블링 X 다양한 데이터를 합쳐서 레이블링해서 self-supervise learning. (단순 supervise learning X)
 
 
 
[사전질문 및 답변]
 
(사전질문 1) 희귀병 등에 대한 원인 추적 등은 위험이 따를 수 있고 데이터가 부족할 수 있습니다. 또, 바이러스 변이와 백신 연구는 곧 특허전쟁부터 무기의 개발로까지 변질될 수 있습니다. 새로운 정보를 얻어낼 때, 정보에 대한 증명과 연구과정에서 부작용을 최소화할 방안은 무엇이 있나요? 어떤 방식으로 학습시키고 어떤 정보를 추출할 지 궁금합니다.
 
(사전질문 1 답변) Rare disorder 등에 대한 AI 는 여러모로 고민이 될 수 밖에 없는 부분입니다. 대규모 데이터기반으로 만들어지는 현 시점의 AI모델을 고려할 때, Rare disorder를 model이 알아내는 것도 어려운 문제일 뿐더러,
이를 위한 최선의 management를 위한 여러 형태의 AI , Data-driven method를 만들기에 어려움이 있습니다. 우선 Rare disorder에 대한 identification 부분은 강의에서 다루겠지만,
단순한 supervised learning이 아닌 data에 집중하는 unsupervised learning과 data distribution에서 접근함으로서 해결할 부분이 있습니다.
Rare disorder를 치료하고 타겟찾는 등의 일은 적은 수의 data를 극복할 수 있는 여러 technical한 부분이 적재적소에 들어가야할 듯 합니다. 예를들면 Zero-shot, few-shot learning등이겠습니다.
 
(사전질문 2) 딥러닝이 기존에 전공의나 임상의가 하던 일을 대신하면 사람은 어떤 일에 집중하게 되나요? 또 지금 딥러닝이 대신 해주는 분야에 대한 지식이나 인사이트는 어떻게 얻게 될까요? 요즘 혈압 측정 기기가 있어, 간호사도 수동 혈압측정기를 잘 못쓰시더라고요. 그러나 그런 기기가 없거나 딥러닝 제품을 사용하기 어려운 곳에서도 환자는 있게 마련이어서요.
 
(사전질문 2 답변) 딥러닝으로 일부의 일이 줄어드는 부분은 있겠으나, 현 단계에서는 많은 일을 대신해주어 업무가 완전히 재배치될 만큼의 모습은 보기 어려울 듯 합니다. 진단 support system의 일부에서 업무량이 줄어드는 정도이고,
결국은 오히려 AI가 생산하는 새로운 정보가 또다른 해석과 진료에 활용되는 방향으로 흘러가기 때문에, 사람이 처리해야하는 정보량이나 일의 양이 줄어들지는 않을 듯 합니다. 물론 먼 미래에 사람의 행동과 사고판단까지 모사하는 기술들, 즉 강인공지능이만들어진다면 모르겠습니다만, 이부분은 현재 논의할 단계는 아닌 것 같습니다.
딥러닝이 대신해주는 분야에 대해 우리가 지식을 꼭 가져야하는가로 질문이 귀결될 수 있을 듯 합니다. 우리에겐 원리가 필요하지 작동원리를 다시 설계해갈 필요는 없습니다. 기술의 발전으로 인해 과거의 행위들에 대한 숙련도가 떨어지는 현상은 자연스러울 수 있습니다. 또한, 이런 기술발전이 사회적 격차를 만들 수 있다는 것도 잘 알려져있습니다.
하지만, 이 역시도 기술이 극복할 수 있는 영역이 있습니다. 오히려 더 많은 부분에서 기술로서 극복하는 사례가 더 많습니다. 예를들어, 안저검사의 경우 미국의 rural area에서는 DL 기반의 장비가 안과전문의를 만나기 어려운 지역에서 screening역할을 할 수 있도록 만들어지고 있습니다.
 
(사전 질문 4) AI의 설명 가능한 정도와 임상 의사의 AI에 대한 신뢰 수준의 관계가 궁금합니다.
 
(사전 질문 4 답변) explainability가 의미하는 바는 매우매우 넓습니다. 짧게는 CAM 과 같이 어느 영역을 보고 판단했는지를 의미하는 것 부터, 어떻게 추론했는지를 파악하는 것 등 매우 넓은영역입니다. 임상에서 중요한 것은 그런데, '합목적성' 입니다.
예를들어, CT영상을 보고 특정항암제에 잘 들을 수 있을지 예측하는 모델을 만들었다고 할 때, 이는 explainability가 없습니다. 그런데 기존에 잘 알려진, 해당항암제의 치료반응을 결정하는 PD-L1이라는 마커가 존재하고, CT영상을 통해 이를 예측할 수 있다고 하면 중간연결고리가 생기면서 설명가능성이 발생합니다.
즉, AI가 추구하는 방향은 이러한 detail한 합리적인 추론으로 만들어갈 수 있느냐에 있습니다. 또한, 의사는 환자를 살리기위해서 어떠한 설명가능한 이유보다, 근거가 중요합니다. 즉 어떤 약제가 효과적인지를 판단할 때 물론 기전도 중요하지만, 최종적으로는 기존 약제보다 더 낫다라는 임상적 근거, 즉 임상시험에 의한 근거가 1순위 입니다.

 


Part 2. 딥 러닝으로의 의료 연구 가속화

2-1. HCLS 워크로드를 위한 가속화 컴퓨팅/ 콜린 컴퍼스

[사전질문 및 답변]

(사전 질문 1) 클라우드 접근 방식 인가요?
(사전 질문 2) 어느정도 규모의 컴퓨팅 시스템을 활용하시나요?
(사전 질문 2 답변) 워크로드의 크기에 따라 다릅니다.
 
(사전 질문 3) 가속 컴퓨팅을 효과적으로 활용하는 데 NVIDIA의 컴퓨팅 플랫폼을 적용하는 방법에 대해서 질문드립니다.
(사전 질문 3 답변) NVIDIA 컴퓨팅 플랫폼에는 세 가지 계층이 있습니다. 하드웨어, GPU에 최적화된 범용 가속 소프트웨어 및 특정 도메인용 소프트웨어가 함께 작동하여 컴퓨팅을 효과적으로 가속합니다.
(사전 질문 4) HCLS 워크로드의 속도는 어느정도이며, 구축시 소모되는 비용이나 필요 사항들은 무엇이 있을까요?
(사전 질문 4 답변) 상황에 따라 다르지만 일반적으로 HCLS 워크로드가 몇 배, 수십 배 또는 심지어 더 빠릅니다. 비용은 하드웨어 부분일 뿐이며 99%의 소프트웨어는 되어오픈 되어있으며 무료로 사용할 수 있습니다
(사전 질문 5) 가속화컴퓨팅을 위해서는 컴퓨터의 성능이 하이엔드급의 사양을 요구하게될텐데 엔비디아에선 이부분에 대해 특정 플랫폼이나 기존 그래픽이 아닌 맞는 제품을 별도로 개발하고 있나요?
(사전 질문 5 답변) 아니요. 개발자와 연구자가 작업을 가속화하기 위해 그래픽, 플랫폼, 사전 교육된 모델 및 데모 스크립트를 개발하지만 최종 제품이나 애플리케이션은 제공하지 않습니다.
 
사전 질문 6) 수백만 개의 분자를 처리하고 수백 가지의 잠재적인 약물을 선별하기 위해 컴퓨팅을 어떻게 가속화할 수 있습니까?
(사전 질문 6 답변) AI 및 HPC 도구를 사용하여 약물 발견을 수행할 수 있으며, NAMD, AMBER 및 AutoDock과 같은 많은 도구를 통해 GPU에서 가속할 수 있습니다.

 

2-2. 연합 학습을 통한 의료 AI 및 연구 혁신 / 크리스토퍼 커스텐

[사전질문 및 답변]

(사전 질문 1) 대표적인 데이터 관리 기법은 무엇인가요?
(사전 질문 1 답변) 기존 데이터 및 새로운 데이터에 대한 액세스를 단순화합니다.SPARK와 도커를 잘 활용하고 있습니다.
 

​(기타 질문 ) Flare 는 Platform independent 한가요? Nvidia machine 이 아니어도 동작 하나요? Mobile 이 client 인 경우도 고려되고 있나요? / NVIDIA의 Flare는 Flare 안에 구현되어있는 ML/DL 알고리즘 등만 사용할수있는게아니라 제가 원하는 모델들을 제한없이 이용할 수 있는 건가요?

(기타 질문 답변) 

예, 독립적이며, FL 전용이며 ML/DL 워크플로우를 통합할 수 있습니다. 필요한 것은 Python 3.8 환경뿐입니다. https://nvidia.github.io/NVFlare/inst...

 
(사전 질문 2) Federated Learning과 중앙집중형 처리의 모델 성능을 대규모 데이터에서 비교해 본 사례가 있는지, 또한 작업의 배분, Workflow Monitoring이 플랫폼 상에서 어떻게 이루어 지는지 궁금합니다.

사전 질문 2 답변) 예, FL과 데이터 중앙 집중화의 성능을 비교했습니다. 초기에는 FL이 사이트의 일부 매개 변수만 집계했기 때문에 성능이 떨어졌으나 수백 번의 에포크 후 데이터 중앙 집중화 케이스와 거의 동일한 성능을 달성했습니다. 우리는 ADMIN API를 가지고 있으며,수석 연구원이 이를 사용하여 플랫폼의 작업을 모니터링할 수 있습니다.

 

사전 질문 3) API 기반 연동외에 사전 개발적용된 도구나 툴킷도 제공되는지 궁금합니다.

사전 질문 3 답변) 예, NGC 사이트를 참조하십시오. NGC 사이트에서 필요한 모든 사전 개발 도구를 제공합니다. https://catalog.ngc.nvidia.com/

 

사전 질문 4) 1) 의료 태스크는 개인정보에 민감하기에 로컬 디바이스의 데이터를 중앙으로 공유하지않는 federated learning이 적합한 어플리케이션이라는 생각이 들지만, FL을 사용함으로써 생기는 performance degradation에도 불구하고 FL을 사용해야하는 장점이 궁금합니다. 2) 의료데이터는 인종마다 특징이 다른데, semantic하게 유사한 이미지 외에 시퀀스 데이터 등은 인코딩했을 때 피처 레벨에서도 인종 간 유의미한 차이가 있을 수도 있다고 생각합니다. 이 경우 FL을 사용하면 클라이언트 간의 data distribution의 차이가 커서 학습이 제대로 안 될 수 있는 문제가 생길수 있을 것 같은데 어떻게 생각하시나요?

사전 질문 4 답변) 1) 이 분야에서 NVIDIA에서 발행하는 네이처 페이퍼를 참조하십시오. 뛰어난 성능을 보여주는 몇 가지 벤치마킹 이미지가 있습니다. https://www.nature.com/articles/s4159... 2) 네이처 페이퍼는 다양한 인종을 포함하고 있습니다.

 

사전 질문 5) 분산 다중 파티 협업이면 이 부분에 블록체인기술이 연계되어 있나요?

사전 질문 5 답변) 네, 여기에서는 블록체인 기술을 사용할 수 있지만, 아직 사용하지 않았습니다.

 

사전 질문 6) 각 App. 를 효과적으로 제어/모니터링하기 위한 기능은 어떤것들이 있을지요. 학습효과를 극대화 하고 학습현황 등에 대한 가시성도 확보가 되는지도 궁금합니다.

 

2-3. SNUH 연구발표 #2 - 실제 의료에서 연합학습 관련 연구 사례 / 공현중

 

 

 


 

 

Part 3. 바이오 및 임상 분야의 AI

3-1. 생명과학을 위한 인공지능 : 단백질 구조 예측의 미래/ 에이드 오제월

 

[사전질문 및 답변]

(사전 질문 1) 현재까지 crystallography를 통해 밝혀진 구조들은 생체내 존재하는 단백질중 극히 일부입니다. 대부분의 단백질은 세포막에서 발현되거나 crystalization이 힘든 단백질들이 대부분이며 이들이 질병에 굉장히 밀접한 단백질이지만, 구조를 밝히지 못하여 데이터 또한 존재하지 않습니다.
현재의 Alphafold와 같이 기존 데이터를 사용한 기계학습에서는 앞선 구조를 밝혀내지 못한 단백질의 특이적 feature들을 반영한 단백질 구조 예측 모델이 없는데, 이를 타계하기 위해서는 기존의 물리화학적 지식 및 생물학적 발생원리규명등 다양한 추가정보가 필요할 것으로 생각이 됩니다.
어떤 정보를 추가적으로 쓴다면 이러한 한계점을 넘을수 있을거 같으며, 이러한 한계점을 넘기 위한 새로운 모델 Architecture에 대한 생각이 궁금합니다.
(사전 질문 1 답변) 좋은 지적이에요. Dry lab과 Wet lab이 AI 약물 발견의 트렌드인 이유입니다. 생명공학은 DL 모델의 예측을 정확하게 검증하기 위해서는 둘 다에 의존해야 합니다.
(사전 질문 2) 자연어처리 모델은 기본적으로 방대한 언어 데이터 속의 규칙성을 파악하고, 추론하고자 하는 언어학적 시도를 전산적으로 구현한 것으로 배웠습니다. 아직 언어의 변화를 주도하는 원동력에 관해선 많은 부분이 안개 속에 있다고 언어학자들은 이야기합니다. 비록 자연어 처리 모델이 언어의 변화를 사용자에 앞서 예측할 수는 없지만,
현재 사용하는 언어의 컴퓨터적 구현을 통해 HCI적 이점이 크다고 알고 있습니다. 하지만 nvidia 단백질 구조 예측 시스템은 관련 문서상으로 보았을 때 아직 발견되지 않은 바이러스의 단백질 특성 등에 대한 예측을 목표로 하는 것으로 보입니다.
그렇기 위해선 기존의 자연어 처리 시스템보다 더 나아가, 변화의 원동력을 찾아낼 수 있는 시스템이 필요하다고 생각되는데, 아직까지는 이를 위한 이론적, 기술적 구현을 확인하지 못했습니다. 혹시 nvidia에서 위와 같은 내용에 대한 시도가 이루어지고 있는지 궁금합니다.
(사전 질문 2 답변) 질문자님께서 매우 정확히 이해하고 계십니다. 우리는 아직 이를 위해 노력하지 않고 있지만, 현재 주로 개발자와 연구자의 워크플로우를 가속화하기 위해 매우 큰 컴퓨팅 능력을 필요로 하는 최적화된 사전 교육 모델을 제공하는 SOTA 자연어 처리 모델을 학습하고 있습니다. 이론적 및 기술적 구현을 확인하는 데는 아직 시간이 필요합니다.
(사전 질문 3) 작년에 ALPHAFOLD로 상당히 깊은 인상을 받았다. 이것이 더 발전하여 물리/화학 작용으로 인한 변성까지 예측하는 것은 얼마나 시간이 걸릴 거 같은가
(사전 질문 3 답변) 알파폴드는 구글 딥마인드가 개발한 제품이라 정확한 답변을 드릴 수는 없지만 시간이 오래 걸리지는 않을 것으로 생각합니다.
(사전 질문 4) 자연어 처리 모델을 통해 크고 복잡한 단백질 구조를 이해, 예측할 수 있었던 방식이 궁금합니다 !
(사전 질문 4 답변) Openfold을 계속 활용해 주세요. 새로운 가중치로 AF2 모델을 재교육하여 보다 복잡한 구조를 예측할 수 있습니다.
(사전 질문 5) 단백질 구조를 이해하고 예측하는 데 자연어 처리 모델을 효율적으로 활용할 수 있는 방법에 대해서 문의드립니다
(사전 질문 5 답변) AlphaFold2와 RosettaFold의 다운스트림 응용에 이어 항체 설계, 표적 추출 등과 같은 많은 연구 논문들이 진행 중입니다.

(사전 질문 6) 그래프 신경망 단백질 구조 예측을 사용할 수 있는 것은 무엇일까요?

NVIDIA Korea(사전 질문 6 답변) 네, GNN은 단백질 구조 예측에 사용될 수 있습니다, 많은 논문에서 GNN이 해당 영역에서 잘 작동한다는 것을 보여주었습니다.
 
NVIDIA Korea(사전 질문 7) 예를 들어 AI상담센터를 운영하고자 할때 고객의 음성을 텍스트로 변환하고 고객의 요구에 맞는 답안을 도출한뒤 이를 다시 음성으로 변환하는데 있어서 가장 중요한 부분은 학습과 AI 엔진의 고도화일텐데요. NVIDIA 에서 이러한 비즈니스 모델에 적합한 솔루션을 소개해 주신다면 어떤 구성이 적절할지 문의드립니다.
(사전 질문 7 답변) 3가지 제안을 드립니다.
a. 고객이 AI에 대해 잘 알지는 못하지만 컴퓨팅 화학 분야의 적용법이 필요한 경우입니다. NVIDIA는 로코드 또는 코드가 없는 AIDD 솔루션을 사용하는 Schrodinger, AMBER, CyroSPARC와 같은 일부 ISV를 추천할 수 있습니다.
b. 고객이 HPC 및 AI에 익숙하다면 Linux 커맨드 라인을 통해 또는 DL 도커를 통해 활용할 수 있습니다. 그런 다음 고객이 NGC에서 Clara Discovery를 AF2, Rosetta, RF-design, molecularnet, openfold와 같은 인기 있는 도구와 함께 사용할 것을 권장합니다.
c. Customer가 HPC와 AI에 매우 강하다면 NVIDIA는 고객이 DL 모델을 공동으로 파인튜닝하거나 CUDA 커널을 최적화하도록 도울 수 있습니다.
(사전 질문 8) 주제가 신선합니다. 자연어 처리 모델의 어느 부분이 단백질 구조 이해/예측에 적용되었는지와 이 로직을 다른 어떤 분야에 활용가능할지 궁금합니다.
(사전 질문 8 답변) Clara Discovery부터 시작할 수 있습니다. 많은 CUDA 라이브러리는 HTS, Audodock, FEC, 분자 역학에 유용합니다. 그런 다음 트랜스포머에 크게 의존하는 알파폴드2의 논문과 코드를 주의 깊게 읽어 보십시오. 알파폴드2와 로제타폴드는 단백질 구조 예측에 가장 인기 있는 프레임워크입니다. RF-Design은 약물 발견의 Denovo 설계에서 가장 널리 활용되고 있습니다. 분자 생성 분야에서는 NVIDIA에 MegaMolBart가 있으며, moleculenet을 확인할 수도 있습니다.

 

3-2. 바이오메디컬 및 임상 분야의 지식 추출 및 검색/ 엔서니 코스타

 

 

-- future -- 

 

[사전질문 및 답변]

(기타질문) ​Transformer의 Encoder만 (BERT), Decoder만(GPT) 모델이 유명한데, 왜 둘 다 사용하는 모델이 지양되고, 이런 2가지 모델 형태로 분리되는건가요?

(사전 질문 1) 거대한 언어모델을 이용해야할 것같은데 NVIDIA에서 어떻게 제공해주고 그 비용은 어떠한지 궁금합니다.

3-3. SNUH 연구발표 #3. - Bio 관련 ML/DL 연구 사례/ 김광수

Multi-omics-based severity prediction model for COVID-19 patients.

<BackGround>

감염 -> 바이러스가 세포에 들어감 -> 쪼개져서 세포에 제시 -> 다른 세포들이 활성화되고, B cell 이 항체 만듬.

바인딩이 잘 되어야 중증으로 가지 않게됨. 바인딩 메커니즘에 문제가 생기면 중증 생긴다는 가정.. 

Omics : Total. 

-- 선행연구 -- 

1. 

암 전이된사람 vs 암 전이 안된사람 classification.

Gene Expresion + Protein-Protein interaction 정보 --> Graph 로 이용

2. 

 

3. 

 Omics 유사도 구해서, 네트워크 생성 (각각의 Omics 따로 구축한다는 한계)

Protein 유사도 구해서, 네트워크 생성 

----> fusion, 하나의 네트워크로 통합 -> classification model & 유사 증상 환자 그룹화 

4. 

-----------------------

사용 Data

경증 vs 중증 구분 기준

------ 모델 구축

(전제) 바인딩.

노드타입 : 유전자 정보, 코로나 서열정보, Tcell, Bcell 정보

바인딩 정보 : 노드간의 상호관계

 

경증과 중증간에 어떤 연결관계가 다른지 확인하고 싶은 것.

 

A,U,G,C 중요한 부분 뽑아내서(참조 유전체 바탕 ORF 분석) -> Codon 을 Protein sequence 로 바꿈. 

환자마다 각각의 matrix 가 생김. 

펩티드 서열 넣으면, HLA-A 값 구하는 Binding 값 내주는 Tool 이 있음. 

각각의 바인딩 스코어를 구해서 평균

 

각각의 서열을 넣고, 바인딩을 구함. 그리고 스코어값이 어떻게 다른지 확인.

바인딩 <- 잘 안되면 항원 제시가 잘 안됨. 혹은 T cell 활성화가 잘 안됨. 높아야 정상 반응

추가적으로..

어떤 Ligand, 어떤 Receptor 가 반응하는지 이미 잘 알려져있음. interaction score 구해서 함.

 

기존에 있는 것을 이용해 Cell annotation , 이후 Cell-Cell interaction 확인

 

Cell 안에 어떤 세포,.. 

-- 결과 --

 

(아마)교신저자 : kksoo716@gmail.com/ 서울대학교병원 김광수 교수님

마무리 말씀 : Biology -> ML로 계산할 수 있는 문제로 바꾸기까지 Domain knowledge 가 굉장히 많이 필요하다. 

 

[사전질문 및 답변]

질문 1) 멀티 오믹스 데이터를 최적으로 통합하고 분석하기 위해 중점적으로 검토하고 점검해야할 것들?

답변 1) 네트워크 형태로 바꾸는 것이 좋을 것이다. 일단 각각의 데이터셋의 퀄리티를 올리는 것이 중요할 것이다. 모든 feature 를 다 쓰기 보다, 의미있는 feature(약물에 반응하는) 만을 사용하는것이 통합에 도움이 될 것이다.  

답변을 얻지 못한 누군가의 질문 >> ​코로나 백신도 인체의 면역작용에 기반하는 것으로 보입니다. 어떤 질병은 평생 한번의 백신으로 면역이 유지되는데 반해 코로나는 3~6개월 사이에 부스터샷으로 백신을 추가 접종하였습니다. 질병마다 면역력이 다른 이유를 알고 계시면 설명해주시면 좋겠습니다. 이런 면역력을 길게 더 늘릴 수 있는 방안에 대한 연구도 진행이 되고 있을까요?


폐회사

About 강연 다시보기 :
사전등록하신 분에 한하여 다시보기 링크를 제공할 예정
 

 

후기

- NVIDIA 에서 주최하는 만큼 NVIDIA의 MONAI, FLARE 와 같은 TOOL, NVIDIA에서 개발 및 연구한 내용이 주를 이뤘다. 나는 각 주제에서 좀더 General 한 얘기를 들을 수 있을 줄 알았는데, 살짝은 아쉬웠다. 반면 서울대병원 교수진분들은 좀 더 General & Overall 한 내용을 다뤄주셨다.

- 각 세션마다 NVIDIA 연설자가 강연한 이후에 서울대병원 교수진분들이 강연을 해주셨는데, 이 순서를 반대로 바꾸는것이 더 좋을 것 같다는 생각이 든다. 먼저 전반적인 해당 주제에 대한 내용을 다룬 뒤에, NVIDIA의 이를 위한 Tool, 노력으로서의 개발 내용 들을 듣는게 더 유익할 것이라는 생각이 들었다.

- NVIDIA의 MONAI, FLARE 등의 TOOL 및, 데이터 분석을 위한 GPU 등에 관심이 있고, 앞으로 사용해볼 생각이 있는 사람이라면 확실히 도움이 될 것이다. 그게 아니라면 크게 추천하지는 않는다. 개인적으로는 데이터분석을 공부할 사람이라면 앞으로 MONAI, FLARE 등의 툴을 어느정도 이해하고, 경험해봐야 할 것 같아서 듣길 잘했다고 생각한다.

- QnA 시간이 따로 확정적으로 존재하는게 아니어서 아쉽다. 시간이 남으면 그 시간 안에 하고, 시간이 없으면 아예 안하기도 한다. 혹은 강연 중에 실시간으로 질문이 올라오고 답변이 올라오기도 한다. 그렇다보니 본 강연에 집중이 흐트러질때가 종종 있었다. 

- 각 세션을 설명해둔 주제와 실제 강연의 내용이 매칭이 안되는 부분이 있는 것 같다. 그리고 녹음된 음성이 명확하게 들리지 않아서 듣기 불편할때가 있었다. 

- 가장 아쉬웠던 부분은 자막.. 실시간 강연도 아니고, 시차때문에 녹화된 영상을 틀어주는데 영어/한국어 자막이 없다. 실시간 강연이라면 어쩔 수 없지만 녹화된 영상같은경우는 충분히 달 수 있던 부분이었다고 생각한다. 

- 앞으로는 영어 스피킹 연습, 영어 듣기 연습을 많이 해두어야겠다.

 

Transformer  Attention all you is need 논문에서 제안된 모델 구조로, RNN  long-term-dependency 의 한계점을 극복하기위해 제안된 아키텍처입니다. (은닉 상태를 통해 과거 정보를 저장할때, 문장 길이ㅏ 길어지면 과거 정보가 마지막시점까지 전달되지 못하는 현상)트랜스포머가 출현함으로써 자연어 처리 분야는 획기적으로 발전되었으며, BERT, GPT3, T5등과 같은 혁명적인 아키텍처가 발전하는 기반이 되었습니다.

트랜스포머는 RNN에서 사용한 순환 방식을 사용하지 않고, 순수하게 어텐션만 사용한 모델이며,셀프 어텐션이라는 특수한 형태의 어텐션을 사용합니다.

트랜스포머는 다음과 같이 인코더와 디코더가 결합된 형태를 가진 모델입니다. 먼저 인코더에 입력 문장(원문)을 입력하면 인코더는 입력문장의 표현을 학습시키고, 그 결과를 디코더로 보냅니다. 디코더는 인코더에서 학습한 표현결과를 입력받아 사용자가 원하는 문장을 생성합니다.

가령 영어를 프랑스어로 번역하는 과제가 있다고 하면, 다음의 그림은 영어 문장을 입력받은 인코더를 나타낸 것입니다. 인코더는 영어 문장을 표현하는 방법을 학습한 다음, 그 결과를 디코더에 보냅니다. 인코더에서 학습한 표현을 입력받은 디코더는, 최종적으로 프렁스러오 번역한 문장을 생성합니다.

트랜스포머는 N개의 인코더가 쌓인 형태입니다. 인코더에 결괏값은 그 다음 인코더의 입력값으로 들어갑니다. 가장 마지막에 있는 인코더의 결괏값이, 입력값의 최종 표현 결과가 됩니다. 입력값으로 입력 문장을 넣게되고, 최종 인코더의 결과값으로 입력 문장에 따른 표현 결과를 얻게됩니다. N=6 이라는 말은 인코더 6개를 누적해 쌓아올린 형태를 표현한 것입니다.

인코더의 세부 구성요소를 표현하면 다음과 같습니다. 모든 인코더 블록은 형태가 동일하며, 그림에 나와있는 두 가지 요소로 구성됩니다. 멀티헤드 어텐션 이해하기 전에, 셀프 어텐션의 작동원래를 살펴보면,

이 문장에서 it  dog  food 를 의미할 수 있습니다. 그러나 문장을 자세히 살펴보면 it dog 를 의미한다는걸 알 수 있죠. 위의 문장이 주어질 때, 모델은 it dog 인것을 어떻게 알 수 있을까요? 이때 셀프어텐션이 필요합니다.

이 문장이 입력되었을 때, 모델은 가장 먼저 단어 ‘A’의 표현을, 그다음으로 단어 ‘dog’의 표현을 계산한다음, ‘ate’라는 단어의 표현을 계산합니다. 각 단어를 계산하는 동안, 각 단어의 표현들은 문장안에 있는 다른모든단어의 표현과 연결해 단어가문장내에서 갖는 의미를 이해하게 되는 것입니다. 어텐션을 사용할 때 헤드 한 개만 사용한 형태가 아닌, 헤드 여러 개를 사용한 어텐션 구조를 멀티헤드어텐션이라 부릅니다.

트랜스포머는 RNN과 같이 순환 구조를 따르지않고, 단어 단위로 문장을 입력하는 대신에 문장 안에 있는 모든 단어를 병렬 형태로 입력하게 됩니다. 그러나 병렬로 연결하기 때문에 한가지 문제가 발생하는데, 단어의 순서 정보가 유지되지 않은 상태에서 문장의 의미를 어떻게 이해할 수 있냐는 점입니다. 문장의 의미를 이해하기 위해서는 단어의 순서가 중요하기 때문에, 트랜스포머에 단어의 순서 정보또한 제공하게 됩니다.

 

다음으로 디코더에 대해서는 간략히 설명하도록 하겠습니다.

디코더는 인코더의 결과값을 입력값으로 사용하게 되는데요.

디코더역시 인코더처럼 N개를 누적해 쌓을 수 있습니다. 디코더 출력값은 그 위에 있는 디코더의 입력값으로 전송되며, 인코더의 출력값은 모든 디코더에 전송이 되게 됩니다. , 디코더는 이전 디코더의 입력값과 인코더의 출력값(표현) 이렇게 2가지를 입력데이터로 받습니다.

원하는 문장을 생성하는 과정을 들여다보면, 시간 스텝 1에 시작을 알리는 <sos>가 입력되며 첫번째 단어인 je을 생성합니다. 이후 je 와 표현 정보 넣고 다음 문장을 생성합니다. 이 과정을 반복합니다.

이후 인코더와 마찬가지로 디코더 입력값에 위치 인코딩값을 더해 디코더의 입력값으로 사용합니다.

하나의 디코더 블록은 다음과 같은 요소들로 구성됩니다. 디코더 블록은 인코더 블록과 유사하게 서브레이어에 멀티헤드~와 피트포워드 네트워크를 포함합니다. 그러나 인코더와 다르게 두가지 형태의 멀티헤드어텐션을 사용합니다. 그 중 하나는 어텐션 부분이 마스크된 형태입니다.

앞서 언급했던 셀프 어텐션은 각 단어의 의미를 이해하기 위해 각 단어와 문장 내 전체 단어를 연결했었던것과 다르게, 디코더에서는 문장을 생성할 때 이전 단계에서 생성한 단어만을 입력문장으로 넣는다는 점이 중요합니다. , 이런 데이터의 특성을 살려 모델학습을 진행해야하는 것입니다. 모델이 아직 예측하지않은 오른쪽의 모든 단어를 마스킹하고, 학습을 진행하게 됩니다.  

이러한 마스킹 작업은 셀프 어텐션에서 입력되는 단어에만 집중해, 단어를 정확하게 생성하는 긍정적인 효과를 가져옵니다. 디코더는 vocab 에 대한 확률 분포를 예측하고, 확률이 가장 큰 단어를 선택하는 방식입니다.

최종적으로 인코더와 디코더를 결합한 형태는 다음과 같습니다.

다시 정리하면, 입력 문장을 입력하면 인코더에서는 해당 문장에 대한표현을 학습하고, 그 결과값을 디코더에 보내면 디코더에서 타깃 문장을 생성합니다. 또한 우리는 손실 함수를 최소화하는 방향으로 트랜스포머 네트워크를 학습시킬 수 있겠습니다.

 

지금까지 Transformer 모델이 무엇인지에 대해 간략히 살펴보았습니다.

Encoder 만을 사용한 모델은 AutoEncoding Model, decoder 만을 사용한 모델을 Auto regessive Model, Encoder  Decoder 를 모두 사용한 모델은 Sequence to Seqence model 이라고 부릅니다. 그 외에도 Multimodal Model, Retrieval-base model 등 다양한 종류가 존재합니다.

Decoder 에 기반한 모델,  Auto regressive 모델에는 GPT, GPT2, Transformer-XL, CTRL, XLNet 등이 있고, Encoding 에 기반한 모델에는 BERT, ALBERT, RoBERTa, XLM, EBECTRA 등이 있습니다.

이 중에서 저희가 오늘 집중해 살펴볼 모델은 transformer-Encoding based 모델인 BERT  XLM 입니다.

BERT 는 가장 널리 사용되는 고성능 텍스트 임베딩 모델로, Bidirectional Encoder Representations from Transformers 의 약자입니다. 다양한 자연어 처리 태스크 분야에서 가장 성능이 뛰어나며, 자연어 처리가 전반적으로 한걸음 나아가는데 이바지 한 모델입니다.  BERT 18년에 논문이 공개된 구글의 최신 Language Representation Model 이며, 말씀드렸듯이 인코더 구조만을 활용한 언어 모델입니다.

BERT가 성공한 주된 이유는 문맥을 고려한 임베딩 모델이기 때문입니다. 그렇다면 문맥을 고려했다는 의미가 무엇일까요? 다음 두 문장을 통해 문맥 기반 임베딩 모델과문맥 독립 임베딩 모델의 차이를 이해해보도록 하겠습니다.

A 문장과 B 문장을 보면, 두 문장에서 파이썬 단어의 의미가 서로 다르다는 것을 알 수 있습니다. A 문장에서 파이썬이라는 단어는 뱀의 한 종류를의미하고, B 문장에서 파이썬이라는 단어는 프로그래밍 언어를 의미합니다. 워드투벡터와 같은 임베딩모델을 사용해 두 문장에서 파이썬이라는단어에 대한 임베딩을 얻는경우, 두 문장에서 동일한 단어가 쓰였으므로 동일표현. 반면 BERT는 문맥기반. 문맥이해후 다음문맥에따라 임베딩생성. 따라서 서로다른임베딩 제공.

그렇다면 BERT는 어떻게 작동하는것일까요?

먼저 A 문장 살펴봅시다.

 BERT는 모든 단어의 문맥상 의미를 파악하기 위해 문장의 각 단어를 문장의 다른 모든 단어와 연결시켜 이해합니다.파이썬 문맥상 의미를, BERT는 파이썬이라는 단어를 가져와서 문장의 다른 모든 언어와의 관계 기반 이해를 시도합니다. 따라서 BERT는 파이썬이라는 단어와물었다라는 단어의 강한 연결관계 파악후 뱀의 한 종류 의미 파악이 가능하게 되는 것입니다.

B 문장또한 마찬가지로 모든 단어를 연결합니다. 이를 통해 B 문장의 파이썬이, 프로그래밍이라는 단어와 관련있음을 인지.

BERT L, H, A 파라미터에 따라 성능 및 버전이 달라지게 되는데, 여기서 Layer  Transformer 블록의 숫자이고, H hidden size, A Transformer Attention block 숫자입니다. , L, H, A 가 크다는 것은 블록을 많이 쌓았고, 표현하는 은닉층이 크며, Attention 개수를 많이 사용하였다는 뜻입니다. 블록을 n번 쌓았다는 의미는 즉 입력 시퀀스 전체의 의미를 n번만큼 반복적으로 구축하는 것을 의미합니다.

, 앞서 잠시 언급드렸듯 생성된 Token Emdedding 과 함께, 각 토큰의 위치정보를 임베딩하는 Positional Embedding , 문장을 구분하는 segment embedding 까지 총 3개의 임베딩을 결합하여 임베딩을 표현합니다. 

BERT를 각 Task에 쓰기위한 예시는 다음의 그림과 같습니다.
(a)
는 문장 쌍 분류 문제로 두 문장을 하나의 입력으로 넣고 두 문장간 관계를 구한다.
(b)
는 한 문장을 입력으로 넣고 문장의 종류를 분류하는 문제이다.
(c)
는 문장이나 문단 내에서 원하는 정답 위치의 시작과 끝을 구한다.
(d)
는 입력 문장 Token들의 개체명(Named entity recognigion)을 구하거나 품사(Part-of-speech tagging) 를 구하는 문제이다. 다른 Task들과 다르게 입력의 모든 Token들에 대해 결과를 구한다.

다음으로 BERT의 사전학습에 대해 설명드리겠습니다. 사전학습이란 무엇일까요.

모델을 하나 학습시켜야한다고 가정해봅시다. 일단 특정 태스크에 대한 방대한 데이터셋으로 모델을 학습시키고 학습된 모델을 저장합니다. 그 다음, 새 태스크가 주어지면 임의 가중치로 모델을 초기화하는대신, 이미 학습된 모델의 가중치로 모델을 초기화합니다. , 모델이 이미 대규모 데이터셋에서 학습되었으므로 새 태스크를 위해 새로운 모델로 처음부터 학습시키는 대신 사전학습된 모델을 사용하고, 새로운 태스크에 따라 파인튜닝하는 것입니다.

BERT 에서는 MLM NSP 라는 두 가지 태스크를 이용해 거대한 말뭉치를 기반으로 사전학습, 자가 지도 학습이 이루어집니다. MLM Masked Language Model, NSP Next-sentence Prediction , 의 약자입니다.

간략히 설명하면, MLM 이란, 문장을 고의로 훼손시킨 후 이를 소스 문장으로 복원하는 방법론으로, 해당 과정에서는 입력문장의 15%에 해당하는 토큰을 임의로 선택하여, 선택한 토큰 중 80%  MASK 토큰으로, 10%는 임의의 다른 토큰으로, 그리고 10%는 기존 토큰 그대로 두는 방식으로 훼손시킵니다. 즉 레이블이 없는 단일 언어 말뭉치에서, 기존 문장을 고의로 훼손시키고, 소스 문장으로 복원함으로써, 언어에 대한 양방향적 문맥을 파악할 수 있게됩니다.

NSP란 입력문장을 구성할 때, 50%는 기존의 순서대로 ㅇㄴ속된 문장을, 50%는 임의로 선택된문장을 연결함으로써 두 문장간의 문맥적 의미를 파악하는 작업을 의미합니다. 두 문장이 연속된문장일때는 1, 연속되지않은 문장일때는 0을 도출하게함으로써 문장간 연관성이 타당한지를 판별하는 작업을 학습합니다.

이렇게 사전학습을 마친 단어 임베딩은 말뭉치의 의미적, 문법적 정보를 충분히 담고있어, 훈련되지 않은 언어에 대해서도 우수한 수행능력을 보이며, 다운 스트림 테스크를 수행하기위한 파인튜닝 추가학습을 통해 임베팅을 다운스트림 태스크에 맞게 업데이트 하는 방식으로 이루어집니다. BERT가 등장한 이후로는 특정 자연어 처리 관련 문제를 풀기 위한 연구의 방향성이 사전 학습된 모델을 어떻게 활용할 것인가로 바뀌고 있다고 합니다.

XLM 또한 transformer-인코더 베이스의 모델입니다. 이때 BERT에서 활용된 MLM 뿐 아니라, CLM, TLM 을 추가적으로 활용하여 단일 언어 표현을 완화하고 다양한 언어, 즉 다국어에 대해 모든 문장을 공유 임베딩 공간으로 인코딩 할 수 있는 범용 교차언어 모델을 구축할 수 있게되었습니다. XLM 은 다양한 언어에 대해 공일한 공유 어휘를 사용합니다. 이는 모든 언어의 토큰에 대한 공통된 임베딩 공간을 설정하는데 도움을 줍니다.

CLM이란 이전 토큰들을 기반으로 다음 토큰을 예측하는 작업을 의미하며, 모델은 훈련과정에서 확률 p를 모델링 합니다. , XLM 모델은CLM 을 학습하는 과정에서, 이전토큰을 통해 다음 토큰을 예측함으로써 문장 구조에 대한 이해를 얻게됩니다.  

TLM이란 병렬 말뭉치에 존재하는 소스 문장과 타겟문장을 하나의 입력으로 연결한 후, LML과 같이 문장 일부를 MASK로 치환하고 이를 소스문장으로 복원하는 작업을 의미합니다. 이를 통해 모델은 서로 다른 언어간의 연관성을 더 잘 파악하게 됩니다.

, XLM은 여러 언어데이터를 활용한 MLM CLM, TLM 학습을 통해 여러 언어에 대한 교차언어 정보를 학습하게 됩니다.

이러한 XLM 을 이용한 다국어 언어 모델은 일반적인 다운스트림 작업에서 더 나은 결과를 얻는데 도움이 되고, 유사한 높은 리소스에 대한 학습을 통해, 낮은 리소스 언어에 대한 모델의 품질을 개선할 수 있습니다.

 

 

감사합니다.

 


이 모델링을 활용한 연구를 확인하고 싶다면 아래 링크로 가주세요. 

https://checherry.tistory.com/109

 

[NAACL] Transformer model을 이용한 자연어처리 최신 논문 / Multilingual Language Models Predict Human Reading Behavi

2021년도 동계 저널클럽 활동을 하며, 발표한 자료입니다. 제가 오늘 함께 공유하고자 하는 논문은 NAACL 저널에 기고된 Multilingual Language Models Predict Human Reading Behavior 입니다. https://aclantho..

checherry.tistory.com

 

사실 제가 자연어 분야를 제 주요 연구주제로 하고싶은것은 아닌데... 자연어 분야를 계속 찾아보게 되네요.

다양한 분야를 알게되는것이니, 좋죠 뭐!!

다음에는 뇌종양 segmentation 과 관련한 논문을 리뷰해볼 예정입니다!!

(저는 뇌종양에 관한 연구를 하고싶습니다. )

 

오늘은 Fundamentals of C++ Programming/ by. Richard L. Halterman 책의 542-544 Page 코드리뷰를 해보겠습니다.

해당 내용은 C++ 언어의 Class protection level 및 inheritance 와 관련한 내용입니다.

오늘의 코드 리뷰는 다음과 같은 순서로 이루어지겠습니다.

코드에 Class Protection level 관련한 내용이 있으므로, 먼저 Class 3가지 Protection level 살펴본 ,  Comparer(살펴볼 Class 이름입니다) 헤더파일 cpp 파일을 살펴보도록 하겠습니다.

 

클래스는 멤버함수에 대해 세가지 수준의 보호를 지원합니다.

첫번째로, Private level 있습니다. Private Class 보호수준의 기본값으로,  Class 안의 모든 코드는 Private member 엑세스할 있으나, Class 외부의 코드는 엑세스가 불가합니다.

번째로, Protected level 있습니다. Protected Private 같이 Class 안의 모든 코드가 엑세스 있으며, Class 외부의 코드는 엑세스가 불가합니다. 다만 Derived Class, 상속된 Class 엑세스가 가능합니다

세번째로, Public level 있습니다. Public 멤버는 어드 코드에서나 엑세스가 가능합니다.

 

정리하면, Private Class 외부에서 엑세스 없음을 의미하며, Public 엑세스가 가능함을 의미합니다.  Protected 하위 Class 대해 공개 다른 모든 클래스에 대해 비공개를 의미합니다.

 

오늘 리뷰할 Comparer.h 파일 .cpp 파일은 이후에 소개될 selection sort, 선택 정렬 구현에 필요한 class 만드는 내용입니다. Selection sort 관련한 내용은 다음번에 리뷰하도록 하겠습니다.

Comparer 파일은 다음의 기능을 포함합니다.

1)     선택 정렬 기능에 의해 부과된 순서는, Comparison 함수를 custom하여 변경할 있습니다.

2)     정렬 순서를 결정하는데 사용되는 object 정렬시 수행되는 비교 교환 횟수에 대한 데이터를 수집합니다.

또한 코드를 여러 소스파일로 분할하여 사용하며, 미래에 사용할 있는 두가지 Virtual 메소드를 사용합니다.

그러면 이제 Comparer 클래스의 선언이 포함되어있는 17.33 Comparer.h 파일을 간략히 살펴보도록 하겠습니다.

Comparer Class의 Private 영역에는 int 의 compare_count 와 swap_count가 있습니다.
Private 영역에 있으므로 외부에서 엑세스 할 수 없으며, compare 횟수 및 swap 횟수를 추적합니다.

마찬가지로 Private 영역에 int 2개를 input, bool type을 output으로 하는 비교를 위한 함수 포인터가 있습니다.

Protected 영역에는 실제로 비교를 수행하는 메소드인 virtual Compare_impl 함수, 실제로swap 을 수행하는 메소드인 virtual swap_impl 함수가 있습니다. Derived class는 이 두개의 함수를 custom하여 사용할 수 있습니다.

Public 영역에는 적절한 비교함수로 Comparer 객체를 초기화하게끔 하는 생성자가 있고, 새로운 정렬을 준비하기위해 그동안의 compare 및 swap counter를 0으로 만드는 reset 함수, 비교를 위해 int 2개를 받아 bool 로 반환하는 compare 함수,

Inference로 값을 받아와 해당 값을 교환시키는 swap 함수, 객체의 비교 횟수 및 swap 횟수를 반환하는 함수가 있습니다.

다음으로 cpp 파일에 대해 설명드리겠습니다.

먼저 헤더파일을 include 합니다.
#include "comparer.h"

Comparer class의 compare_impl 함수는 int 2개를 받아 판단후 bool로 반환합니다. 

Swap_impl 함수는 int 2개를 reference로 받아 m을 temp에 저장해두고, m을 n값으로 바꿔주고, n을 미리 저장해둔 m 값, 즉 temp와 바꿔줍니다.

다음은 생성자 초기화입니다. Compare_count를 0, swap_count를 0, 그리고 비교연산자 함수를 사용자가 원하는 함수로 초기화하여줍니다. 

Reset 함수는 compare_count와 swap_count를 0으로 만듭니다.

Compare 함수를 사용하면 compare_count 를 하나 올리고, compare_impl 함수를 실행하여 비교를 수행합니다. 

마찬가지로 Swap 함수를 사용하면 int 2개를 reference로 받아 swap_impl 함수를 실행하여 swap을 수행합니다. 함수가 호출되면 swap_count를 하나 올립니다. 
Compare 및 swap 메소드는 virtual 함수로 선언되지 않으므로 derived class는 재정의할 수 없고, compare_impl 및 swap_impl 만 재정의가 가능합니다.
Comparisins 함수를 호출하면 compare_count를 반환하고,  Swaps 함수를 호출하면 swap_count를 반환합니다. 

둘 모두 swap_count 와 compare_count 는 private영역에 존재하기 때문에, 이렇게 Comparer 클라스 내부에 값을 반환해주는 함수를 만들어둔것입니다.


책의 16.3절, Comparer Class 와 거의 동일한 내용이었는데요,

해당 파일과 클래스의 디자인이 달라진점은,

Private, Protected, Public 의 세가지 보호수준을 적극 이용하여 보호할 내용을 보호하고, 엑세스 할 수 있는 메소드를 지정해주었다는 점,

가상 메소드인 compare_impl 및 swap_impl을 정의하고 custom할 수 있게끔 해주었다는 점,

public의 compare 및 swap 함수가 compare_impl및 swap_impl 함수에 작업을 위임한다는 점, 등이 있습니다.

이는 count 횟수를 엄격하게 보고하기 위함이라고 볼 수 있겠습니다. (log 를 확실하게 저장)


이번 코드 리뷰에서는, Protected 및 private 지정자를 적절하게 사용하면 Class 는 drived class 가 수행할 수 있는 직업을 확실히 제어할 수 있다는 점이 배워갈 부분이라고 생각합니다.

과 제 명 국문 파이썬을 통한 AdaBoost-Samme 알고리즘 구현
영문 Implementation of AdaBoost-Samme Algorithm via Python
이 름 김다예


1. 과제 개요
가. 과제 선정 배경
최근 필자는 공모전 주제로써 ‘당뇨병 발병 예측 모델 구현’프로젝트를 진행하였다.
가장 Accuracy 및 AUC 값이 높은 모델을 찾고자, 총 13개의 머신러닝 Classifier 및 MLP 모델을 적용 및 분석해보았고, 각 모델에 대해 gridSearch 및 HyperParameter Tuning을 하며 score(=AUC)을 비교하였다. 결과적으로, 비교한 모델 중 가장 성능이 좋았던 것은 Samme 알고리즘이 적용된 Adaboost Classifier였다. 필자는 AdaBoost Classifier의 적용 방법만 알 뿐, 상세한 알고리즘에 대한 내용에는 무지하였기에 알고리즘을 구현해보는 이번 과제로서 Adaboost Classifier를 조사하고, 실제 구현해보기로 하였다.

그림1.비교한 Classifier 목록/ 그림2. Adaboost에서 최적의 Parameter를 찾는 과정/ 그림3. Threshold에 따른 AUC값의 변화


나. 과제 주요 내용
1) Boosting 및 AdaBoosting 대해 조사한다.

2) Samme 알고리즘의 의사코드를 확인하고, 설명한다.
3) 파이썬으로 AdaBoost-samme 알고리즘을 구현한다.

4) 구현된 AdaBoost 알고리즘을 실제 적용해보고, 결과를 분석한다.



2. 알고리즘 조사 및 설명
가. Boosting 란 무엇인가?
• 매우 단순한 learning 모델을 여러 개 사용하여 성능이 매우 좋은 모델 구축
• 단순한 learning 모델: 무작위 선택보다 성능이 약간 우수한 weak learner
• 무작위 선택보다 약간 우수한 weak learner를 여러 개 결합하는 앙상블 방식
• 모델 구축 시 순서를 고려
• 각 단계의 weak learner는 이전 단계 weak learner의 단점을 보완


나. AdaBoosting 란 무엇인가?
• 이전 단계 weak learner의 단점을 보완하는 새로운 weak learner를 순차적으로 구축
• 매 단계에서 모든 관측치의 Weight를 업데이트 하는 방식으로 학습
• Weak learner: 하나의 node와 두 개의 leaf로 구성된 stump
• Random forest의 tree와 달리 하나의 stump는 하나의 변수만 사용
• Stump가 잘 분류/예측하지 못하는 관측치는 이후 생성될 stump에서 크게 고려함
• 순차적으로 구축된 stump가 최종적인 분류 및 예측 결과에 미치는 영향은 모두 다름


다. Samme 의사코드 및 설명
Adaboost 기법에는 Samme, Samme.R 의 두가지 알고리즘이 있다.
이번 과제에서는 Samme알고리즘을 구현할 예정이다.

다음은 Samme 알고리즘의 의사코드이다.

1) Selecting Stump
• 초기 Sample weight는 모든 관측치에 동일한 값 부여
• Sample Weight는 stump 구축에 사용된 각 관측치의 영향력을 의미
• 각 변수(feature)애 대해stump생성(변수가 3개라면 stump도 3개)
• Gini Index가 가장 작은 stump를 해당 단계의 weak learner로 사용


2) How much say this stump
• 선택한 weak learner가 최종 예측값에 얼마나 큰 영향력을 행사하는지 파악
(최종적인 분류 및 예측 결과에 대한 해당 stump의 영향력)

• 위의 식에서 Total error = 잘못 분류된 관측치의 sample weight총 합

3) update sample weight
• Stump의 분류 결과를 반영하여 sample weight 업데이트
• Sample weight를 업데이트하여 이후 생성되는 stump가 오분류된 관측치에 집중하게 함
• 업데이트 된 Sample weight를 사용해 다음 단계의 stump를 구축하기 위한 새로운 dataset 생성
• 생성된 dataset은 새로 생성될 stump가 직전 stump에서 오분류된 관측치에 더욱 집중하게 함
• 이후 다시금 개별 관측치의 weight와 stump의 영향력을 순차적으로 계산 및 sample weight 업데이트를 반복하며 학습
• 최종적으로 amount of say의 합을 통해 classification



3. Samme 알고리즘 구현 via 파이썬
가. Samme 알고리즘(Adaboost모델) 구조 설정
Class DecisionStump : Stump를 만드는 Class -> 이후 Adaboost class에서 이용
def __init__(self) : HyperParameter 설정 (polarity, Feature_idx, Threshold, alpha)
def predict(self, X) : 예측값을 반환하는 함수
return predictions
Class Adaboost
def __init__(self, n_clif=5) : HyperParameter 설정 (n_clf, clfs)
def fit(self, X, y) : train_X_data, train_y_data를 받아 fit 하는 함수
def predict(self, X) : 예측할 dataset을 받아, 예측된 y값을 반환하는 함수
return y_pred


. 알고리즘 구현

class DecisionStump:
def __init__(self ):
self .polarity = 1
self .feature_idx = None
self .threshold = None
self .alpha = None

def predict (self , X ):
n_samples = X.shape[0]
X_column = X[:, self .feature_idx]
predictions = np.ones(n_samples)
if self .polarity == 1 :
predictions[X_column < self .threshold] = -1
else :
predictions[X_column > self .threshold] = -1
return predictions

class Adaboost:
def __init__(self , n_clf =5 ):
self .n_clf = n_clf
self .clfs = []

def fit (self , X , y ):
n_samples, n_features = X.shape
# 가중치를 1/N으로 초기화
w = np.full(n_samples, (1 / n_samples))
self .clfs = []
# classifier 를 통해 반복함
for _ in range (self .n_clf):
clf = DecisionStump()
min_error = float ("inf")
# greedy search 를 통해 최상의 임곗값 확인
for feature_i in range (n_features):
X_column = X[:, feature_i]
thresholds = np.unique(X_column)
for threshold in thresholds:
# polarity = 1 로 예측
p = 1
predictions = np.ones(n_samples)
predictions[X_column < threshold] = -1
# Error = 오분류된 Sample weight의 합
misclassified = w[y != predictions]
error = sum (misclassified)
if error > 0.5 :
error = 1 - error
p = -1
# 최고의 성능을 내는 결과값을 저장함
if error < min_error:
clf.polarity = p
clf.threshold = threshold
clf.feature_idx = feature_i
min_error = error
# alpha 계산
EPS = 1e-10
clf.alpha = 0.5 * np.log((1.0 - min_error + EPS) / (min_error + EPS))
# 예측값 계산 및 weight 업데이트
predictions = clf.predict(X)
w *= np.exp(-clf.alpha * y * predictions)
# weight 값 정규화
w /= np.sum (w)
# classifier 저장
self .clfs.append(clf)

def predict (self , X ):
clf_preds = [clf.alpha * clf.predict(X) for clf in self .clfs]
y_pred = np.sum (clf_preds, axis=0 )
y_pred = np.sign(y_pred)
return y_pred


4. 구현된 Samme 알고리즘 실제 적용
가. Test 환경 설명
• Dataset : sklearn에서 기본적으로 제공하는 breast_cancer() dataset을 이용함
• Score : Accuracy를 기준으로 측정
• Trainset, Testset비율 : ‘8:2’ 로 Split
• n_clf : 5로 설정함

나. Test Code
1) 직접 구현한 Adaboost를 통한 Test
if __name__ == "__main__":
from sklearn import datasets
from sklearn.model_selection import train_test_split
def accuracy (y_true , y_pred ):
accuracy = np.sum (y_true == y_pred) / len (y_true)
return accuracy
data = datasets.load_breast_cancer()
X, y = data.data, data.target
y[y == 0 ] = -1
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2 , random_state=5
)
# 5 weak classifiers를 이용한 Adaboost Classifier (구현한 모델 이용)
clf = Adaboost(n_clf=5 )
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
acc = accuracy(y_test, y_pred)
print ("Accuracy:", acc)

Test set Accuracy: 0.9736842105263158

2) Sklearn Labrary 에서 제공하는 Ababoost를 통한 Test
def accuracy (y_true , y_pred ):
accuracy = np.sum (y_true == y_pred) / len (y_true)
return accuracy
data = datasets.load_breast_cancer()
X, y = data.data, data.target
y[y == 0 ] = -1
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2 , random_state=5
)
# 5 weak classifiers를 이용한 Adaboost Classifier (sklearn 모델 이용)
model = AdaBoostClassifier(n_estimators=5 , random_state=42 )
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
acc = accuracy(y_test, y_pred)
print ("테스트 세트 정확도 : ", acc)

Test set Accuracy: 0.9649122807017544



+ Recent posts