인도: 교훈
신디: 세희
드럼: 재형
싱어: 지민, 준영
PPT: 현주


바리새인과 같은 나의 모습을 회개합니다. 주님 제가 뭐가 다른 지체들보다 더 낫다고 이러는 것인지 참 모르겠습니다. 은밀하게 짓는 죄가 이렇게 많은데 뭐가 더 낫다고 교만히 행하는지요. 저를 용서해주세요. 

제게 주어진 삶은 쉽지 않지만, 그래도 주님으로 인해서 기뻐하겠습니다. 주님으로 인해서 기뻐하는 것이 저의 힘입니다. 아자! 주님께서 순간순간 주변의 사람들을 통해서, 말씀으로, 찬양으로 주시는 위로로 다시금 힘을 냅니다.  

죄의 구렁텅이에서 헤어나오지 못하던 저를 다시 태어나게 하신 주님을 찬양합니다. 여전히 연약함으로 넘어질때도 있지만, 제가 그리스도 안에서 새로운 피조물이 되었음을 믿습니다. 이전과 다른 삶을 살겠습니다! 


1. 주를 위한 이곳에

참고 영상: 

연관 말씀:
아버지께 참되게 예배하는 자들은 영과 진리로 예배할 때가 오나니 곧 이 때라 아버지께서는 자기에게 이렇게 예배하는 자들을 찾으시느니라 하나님은 영이시니 예배하는 자가 영과 진리로 예배할지니라 (요 4:23-24)


주를 위한 이곳에 예배하는 자들 중에

그가 찾는 이 없어 주님께서 슬퍼하시네

주님이 찾으시는 그 한사람 그 예배자

내가 그 사람되길 간절히 주께 예배하네


*주 은혜로 이곳에 서있네

주 임재에 엎드려 절하네

그 어느 것도 난 필요없네

주님만 경배해




2. 예수 아름다우신

참고 영상: 

연관 말씀:
여호와 우리 주여 주의 이름이 온 땅에 어찌 그리 아름다운지요 주의 영광이 하늘을 덮었나이다 (시 8:1)


예수 아름다우신

위대하신 주님 부활의 주

어린 양 거룩과 공의

새벽별 같은 나의 구주


*모든 하늘 찬양해

모든 만물이 주 경배해


**아름답고 놀라우신

모든 이름보다 높은 이름

아름답고 놀라우신

주의 이름 높으신 그 이름 예수


***영원히 주 찬양 주 사랑해요

주 사랑해요



3. 내 마음 다해


참고 영상: https://www.youtube.com/watch?v=hzyMVogxuJ8, 마커스

 

연관 말씀:

여호와로 인하여 기뻐하는 것이 너희의 힘이니라 (느 8:10)

하나님이여 주의 백성 앞에서 앞서 나가사 광야에서 행진하셨을 때에 (시 68:7)



내 마음 다해 주 이름 찬양해

주 사랑 깊어 말로 다 못하네

주 앞서 가며 길을 만드시네

오직 내 갈망 영원히 주 찬양


*내 맘에 힘이 되신 주

영원한 빛이 되신 주

내 모든 호흡이 주의 행하심 찬양해

주는 위대한 통치자 

내 모든 것 주께 순복해

내 삶을 주의 불로 채우소서



4. Born Again


참고 영상: http://jusworship.com/?p=4749, 제이어스


연관 말씀: 

할례나 무할례가 아무 것도 아니로되 오직 새로 지으심을 받는 것만이 중요하니라 (갈 6:15)

너희가 나를 택한 것이 아니요 내가 너희를 택하여 세웠나니 이는 너희로 가서 열매를 맺게 하고 또 너희 열매가 항상 있게 하여 내 이름으로 아버지께 무엇을 구하든지 다 받게 하려 함이라 (요 15:16)

그런즉 누구든지 그리스도 안에 있으면 새로운 피조물이라 이전 것은 지나갔으니 보라 새 것이 되었도다.



주 안에서 내 영혼 다시 태어나

이전 것은 지나고 새롭게 됐네

죄로 물든 내 모습 예수와 함께 죽고

부활 생명 내 안에 새로운 삶이 열렸네


*너희가 나를 택한 것이 아니요

내가 너희를 택하여 세웠나니


**오직 내 안에 오직 내 속에 그리스도가 사네

오직 내 삶에 오직 내 맘에 그가 주인 되셨네


***내 생명 그 안에 그의 생명 내 안에

나의 삶이 이전과 같을 수 없네

2015년 이후로 현재까지 읽은 책의 목록을 정리해봤다. 책에 대해 간단히 요약한 책들도 있다. 어떤 책은 여러 번 재독했는데, 재독 횟수가 그 책에 대한 애정 지수를 반영한다고 볼 수 있다. 또한 재독한 책들이야말로 내가 추천하는 책들이다. 2독한 책에 대해서는 파란색 글자로, 3독한 책에 대해서는 빨간색 글자로 강조했다. 아직 1독밖에 안했지만, 개인적으로 상당히 의미가 있었고 이후에 다시 읽을 의향이 있는 책은 볼드체로 강조했다. 50권 단위로 정리할 예정이다. 


1. 오마에 겐이치 지음, 송수영 옮김, "오마에 겐이치가 추천하는 내 생애 최고의 여행", 에디터(2008)

=> 1독(-20150904)


2. 강규형 지음, "성과를 지배하는 바인더의 힘", StarRich Books(2013)

=> 3P 바인더를 개발한 저자가 3P 바인더를 어떻게 활용하는지에 대해 소개한다.

=> 1독(-20150904)


3. 마틴 가드너 지음, 공창식 옮김, "쉽게 배우는 미적분학", 홍릉과학출판사(2004)

=> 미분과 적분에 대해 막연한 두려움이 남아있을 때 이 책이 그 두려움을 많이 빼앗아갔다. 

=> 1독(-20151008)


4. 제임스 패커 지음, 정옥배 옮김, "하나님을 아는 지식", IVP(2012)

=> 세상의 많은 지식과 정보를 알기 위해서는 부단히도 노력하는데, 하나님을 알기 위해서 내가 어떤 노력을 하고 있는가? 하나님을 아는 지식이 가장 귀하다. 

=> http://bskyvision.com/12

=> 1독(-2015????), 2독(-20150630)


5. 신경숙 지음, "엄마를 부탁해", 창비(2008)

=> 유학을 와서 가족과 떨어진 상황에서 읽어서 그런지 몰라도 엄마에 대한 미안함과 그리움, 고마움을 사무치게 느낄 수 있었다. 

=> 1독(-20150917), 2독(-20180630)


6. 팀 켈러 지음, 최종훈 옮김, "팀 켈러의 일과 영성", 두란노(2013)

=> 기독교인이 어떤 마음과 자세로 세상에서 일을 해야하는지에 대한 좋은 방향을 제시해준다. 하나님은 우리가 하고 있는 일을 통해 일하기 원하신다. 

=> 1독(-20151206), 2독(-20170903)


7. 스티븐 아터번, 프레드 스토커 지음, 윤종석 옮김, "모든 남자의 참을 수 없는 유혹", 좋은 씨앗(2003)

=> 성적인 영역에서 거룩하게 살고자 하루하루 분투하는 모든 형제들에게 강력히 추천한다. 

=> 1독(-20160223), 2독(-????????), 3독(-????????)


8. 네이트 실버 지음, 이경식 옮김, "신호와 소음", 더퀘스트(2014)

=> 세상에 존재하는 수많은 정보들 중에서 무엇이 진짜 의미있는 신호이고 무엇이 쓸데없는 소음인지 분간할 수 있도록 돕는 베이지안적 사고를 소개한다. 

=> 1독(-2015????), 2독(-20170917)


9. 깨비 박기덕 지음, "미러리스 & 하이브리드 카메라 입문", 이지스 퍼블리싱(2013)

=> 1독(-2016????)


10. 달라스 윌라드 지음, 윤종석 옮김, "잊혀진 제자도", 복있는 사람(2007)

=> 고독, 침묵, 금식과 같은 결여를 통해 우리의 영성이 훈련된다. 

=> 1독(-2016????)


11. 우줄라 마이크 지음, 양보영 옮김, "왕의 아이", 사랑 플러스(2006)

=> 1독(-20160816)


12. 김의중 지음, "인공지능, 머신러닝, 딥러닝 입문", 위키북스(2016)

=> 1독(-20160831), 2독(-2016????)


13. J.C.라일 지음, 장호준 옮김, "거룩", 복있는 사람(2009)

=> 거룩하게 사는 것이란 추상적인 것이 아니라 지극히 실천적인 것이고 그래야한다. 

=> 1독(-20160921), 2독(-????????), 3독(-20180626)


14. Robert Snowden 등 지음, "Basic Vision", OxfordUniversityPress(2006)

=> 인간의 시각 체계에 대해서 기본적인 이해를 돕는 훌륭한 원서다. 영상처리 전공자들에게 특히 추천한다.  

=> 1독(-20161008), 2독(-????????)


15. 성문출판사 편집부 지음, "성문 기초영문법", 성문출판사(2005)

=> 1독(-20161125)


16. 개역개정 성경 구약
=> 인간을 향한 하나님의 뜻과 사랑을 알 수 있는 책이다. 다른 책과 비교불가하다. 평생 가장 많이 읽고 묵상해야할 책이다.
=> 1독(-2016????), 2독(-2017????), 3독(-20181202)

17. 개역개정 성경 신약
=> 1독(-20160926), 2독(-20170404), 3독(-20190104)

18. 사이쇼 히로시 지음, 최현숙 옮김, "아침형 인간", 한스미디어(2003)
=> 1독(-20160907), 2독(-????????)

19. Raymond Murphy 지음, "Basic Grammar in Use", 캠브리지(2011)
=> 1독(-20170409)

20. 도스토옙스키 지음, 홍대화 옮김, "죄와 벌(상)", 열린책들(2009)
=> 죄를 자백할 때 진정한 자유를 얻는다는 진리를 주인공의 심리묘사를 통해 아주 잘 나타낸다.  
=> 1독(-20170118)

21. 박영덕 지음, "차마 신이 없다고 말하기 전에", IVP(2009)
=> 1독(-20170116)

22. 도스토옙스키 지음, 홍대화 옮김, "죄와 벌(하)", 열린책들(2009)
=> 1독(-20170306)

23. 이시형 지음, "공부하는 독종이 살아남는다", 중앙books(2009)
=> 1독(-20170127)

24. 고영성, 신영준 지음, "완벽한 공부법", 로크미디어(2017)
=> 성장하는 삶을 추구한다면, 올바른 방법으로 충분히, 열심히 공부하라. 
=> 1독(-20170202), 2독(-2017????)

25. 데이비드 그레고리 지음, 서소울 옮김, "예수와 함께한 저녁식사", 김영사(2006)
=> 1독(-20170205)

26. 라이언 강 지음, "네이티브는 쉬운 영어로 말한다(배낭여행편)", 길벗이지톡(2008)
=> 1독(-20170319)

27. 강원국 지음, "대통령의 글쓰기", 메디치미디어(2017)
=> 1독(-20170219), 2독(-2017????)

28. 박영선 지음, "기도", 새순출판사(2007)
=> 기도는 내가 하나님의 사랑받는 자녀임을 확인하고 누릴 수 있게 한다. 
=> 1독(-20170313), 2독(-2017????)

29. 박응용 지음, "Do it! 점프 투 파이썬", 이지스퍼블리싱(2016)
=> 1독(-20170405)

30. 정숙영 지음, "무작정 따라하기 크로아티아", 길벗(2016)
=> 1독(-20170330)

31. 김상복 지음, "결혼한다는 것과 산다는 것", 두란노(2015)
=> 1독(-20170447)

32. 주서택 지음, "결혼 전에 치유받아야 할 마음의 상처와 아픔들", 숲이나무에게(2015)
=> 1독(-20170502)

33. 박효진 지음, "하나님은 아무도 포기하지 않는다", 에젤(2016)
=> 사형수들도 사랑하시고 변화시키는 복음의 능력을 느끼게 도와준다. 
=> 1독(-20170514)

34. Hoffman 지음, "The Nutcracker", Scholastic(2005)
=> 1독(-20170525)

35. 사쿠라이 스스무 지음, 조미량 옮김, "재밌어서 밤새 읽는 수학자들 이야기", 더숲(2015)
=> 1독(-20170714)

36. 오스카 E. 페르난데스 지음, 김수환 옮김, "미적분으로 바라본 하루", 프리렉(2015)
=> 1독(-20170925)

37. 최용섭 지음, "원서 잡아먹는 영작문", 비욘드욜(2011)
=> 1독(-20171117)

38. 포 브론슨, 애쉴리 메리먼 지음, 이주혜 옮김, "양육쇼크", 물푸레(2009)
=> 1독(-2017????)

39. 김재욱 지음, "1318 창조과학 A to Z", 생명의 말씀사(2009)
=> 진화론만이 이야기되는 이 시대가운데 창조론에 대해 생각해보게 한다.
=> 1독(-20171022)

40. 윤필교 지음, "마음을 찍는 사진사", 두란노(1994)
=> 1독(-20171022)

41. 박주봉 지음, "박주봉의 배드민턴", 삼호미디어(2004)
=> 1독(20171028)

42. 이찬수 지음, "처음마음", 규장(2013)
=> 1독(-20171201)

43. 존 스토트 지음, 황을호 옮김, "기독교의 기본진리", 생명의 말씀사(2008)
=> 1독(-20180120)

44. 길버트 스트랭 지음, "linear algebra and its applications", ThomsonLearning(2005)
=> 공학을 전공하는 사람이라면 꼭 읽어야할 선형대수학의 진수를 담고 있다. 
=> 1독(-20180130)

45. 서민규 지음, "에버노트 생각서랍 만들기: 실전편", 비센샤프트(2018)
=> 1독(-20180218)

46. 김난도 지음, "아프니까 청춘이다", 쌤앤파커스(2010)
=> 이삼십대 청년들에게 인생의 선배로서 김난도 교수가 던지는 메시지에는 진정성과 깊이가 있다.
=> 1독(-20180226)

47. 김진명 지음, "글자전쟁", 새움(2015)
=> 한자의 첫 개발자는 중국인이 아닌 한국인의 조상인 동이족이라는 것에 대해 소설의 방식을 이용해서 주장한다. 
=> 1독(-20180301)

48. 이영희 지음, "유대인의 밥상머리 자녀 교육", 규장(2006)
=> 1독(-20180310)

49. 윌리엄 폴 영 지음, 한은경 옮김, "오두막", 세계사(2015)
=> 우리 삶에 왜 어려운 일들이 일어나는지 다 이해할 수 없지만, 하나님은 선하시고 우리를 사랑하신다는 사실은 확실하다. 
=> 1독(-20180409)

50. 웨잉슈잉 지음, 이정은 옮김, "하버드 새벽 4시 반", 라이스메이커(2014)
=> 하버드 학생들이 얼마나 치열하게 공부하는지를 들여다보면서 나태해진 나의 삶을 채찍질할 수 있었다.
=> 1독(-20180424), 2독(-20180717)

말그릇

김윤나 지음

카시오페아



▶ 독후감


"까톡, 까톡."


아는 친구에게 메시지가 왔다. 이번 주말에 시간 있으면    하자고 말이다. 선뜻 “그러자.”라는 말이 나오지 않는다. 만날 때마다 끝없이 늘어놓는 직장과 주변인들에 대한 불평과 투정을 들을 생각을 하니 벌써 지친다. 그러나 거절하면  친구가 상처를 받을  같아서 반가운  만나자고 회신한다. 약속 날짜가 다가올수록 약속이 혹시나 취소되지 않을까 내심 기대한다. 하지만 그런 일은 없다. 그날은 으레 찾아왔고 최대한 눈을 맞추고 고개를 끄덕이며 공감하려고 노력한다. 흡혈귀에게 물린   에너지는 점점 바닥으로 향한다. 모터 달린  움직이는  입에 재갈을 물리고, 긍정적인 생각을 가지라고 세게 조언해주고 싶다. 하지만 상처받을까  그저 듣는다.  시간이 흐른  드디어 헤어졌다. 전원 OFF. 방전.


부모님이 물려주신 순하게 생긴 외모와 친절한 성격 덕분에 나에게는 이런 관계가 상당히 많다. 밝고 에너지 넘치는 사람보다는 조금은 어둡고 무거운 사람들이 나를 많이 찾는다. 만나고 나면  에너지는 위치 이동을 해서 그들에게 옮겨  있고,  이상  것이 아니다. 이제는 많이 지쳤다.


이런 상황에서 김윤나 작가의 <말그릇> 만나게 되었다.  책이 말에 관한 것임을 알았을  사실 구미가 당기지는 않았다. 말에 대한 책은 이미 시중에 많으므로, 굳이  책을 읽어야  당위성을 느끼지 못했다. 하지만 표지만 보고 판단하기엔 책을 쓰신 분에 대한 예의가 아닌  같아 프롤로그와 목차를 펼쳐 보았다. 찬찬히 읽어가는데 말에 대한 기존의 책들과는 조금 다른 관점과 논리가 신선함을 주었고 동시에 호기심을 유발했다.


 책은 말을 잘하려면 우선 건강한 내면을 가진 사람이 되어야  피력한다. 좋은 나무에서 좋은 열매가 맺힐  있다는 것이다. 말과 관련된 기존의 책들이 화자의조리, 논리 초점을 맞췄던 것과는 달리 저자는 ‘인격 초점을 맞춘다. 저자가 제목으로 삼은 ‘말그릇 바로 우리의 내면으로 말을 담는 그릇이다. 사람이 각기 살아온 인생이 다르듯,  사람의 말그릇도 다른 특성과 형태를 지니고 있다. 크고 깊고 넓은 말그릇을 소유한 사람들은  많은 사람을 끌어안을  있다.  다양한 사람과 진심으로 소통할  있다. 하지만 많은 사람의 말그릇이 너무 작다. 상황이 그렇다 보니 서로 상처 주고,  쉽게 상처 받는다. 그러다 보니 만나고 싶은 사람들이 많지 않은 것이 우리의 현실이다.


저자는 말그릇을 건강하게 키우려면, 먼저 자신의 말그릇 상태를 직시해야 한다고 주장한다. , 먼저 자신의 내면에 대해 알아야 한다는 말이다. 이를 위해 저자는 감정, 공식, 습관을 주의 깊게 살펴볼 것을 제안한다. 많은 이들이 자신이 느끼는 감정에 솔직하지 못하고, 여러 고정관념  좋지 않은 습관들을 갖고 있기 때문이다.  특정 상황에서 감정에 솔직하지 못했는지와 고정관념들과 습관들이 생긴 배경을 살펴보면, 말그릇의 성장을 저해하고 있었던 근본적 원인을 찾을  있기 때문이다. 나의 감정, 공식, 습관을 이해했다면, 비로소 자신과 어느 정도 친해졌다고 말할  있다. 자신과 () 사람이어야 다른 사람들과도 진정으로 통할  있다.


저자는 말그릇이  사람에게서  가지 공통된 능력을 발견했다. 바로 경청과 질문이다. 그들은 대화를 나눌  말을 많이 하기 보다는 상대방과 상대방의 세계를 알기 위해 관심 어린 질문을 한다. 또한, 상대방이  괜찮은 사람이라는 생각을 염두에 두고 그들의 말을 편견 없이 듣는다. 심판자의 자리에 앉지 않고 학습자의 태도로 질문하고 듣는다. 상대방의 감정, 공식, 습관을 이해하기 위해 노력한다.


우리는 말그릇이  사람을 만나고 나면 힘을 얻게 되고,  사람을  만나고 싶어진다. 자연스럽게 말그릇이  사람의 인간관계는 점점 풍성해지고 깊어진다. 반면 말그릇이 작은 사람은 점점 외로워진다. 저자는 독자들이 서툰 말로 인해 외로워지지 않길 바라며 글을 마무리한다.


311 페이지로 구성된  책을 통해  감정은 많은 경우에 숨겨져 있었고, 적지 않은 편견과 좋지 않은  습관을 지니고 있음을 알게 되었다. 내가 생각한 것만큼 나의 말그릇이 성숙하지 않다는 것을 알게 되어 사뭇 놀랐다. 그동안  듣는 ‘하고  공감하는 ‘하는 기술은 있었지만, 진심으로 상대에게 관심을 가지고 알아가려는 마음은 부족했다. 상대방으로부터 뭔가를 배우려는 마음보다는 평가하려는 마음으로 대화를 나눌 때가 많았다. 이것이 나의 가장  문제였다. 그리고  감정을 제대로 표현하지 않아 마음이 갑갑할 때가  많았다. 항상 좋은 감정만 표현하려고 했으니 말이다. 그러다 보니 나에게 있는 슬픔, 외로움  어려움을 알아주는 사람은 거의 없는 것처럼 느껴졌다. 말하지 않았으니 당연한 일이다. 이제야 문제 해결의 실마리가 조금 보이는  같다. 예전에 재밌게  영화 <인사이드 아웃>  장면처럼 ‘기쁨  마음의 운전대를 잡아야  때도 있지만, 때로는 ‘분노 주도권을 차지해야  때도 있고, ‘슬픔 일해야  때도 있다는 것을 비로소 받아들이게 되었다.  감정을 있는 그대로 표현할  나는 자연스러운 옷을 입게  것이고,  모습을 사람들도  받아들이기 쉬울 것이다. XL 사이즈의 옷을 입어야 하는 내가 M 입는다면 나도 몸에 찡겨 답답하고 보는 사람도 불편하지 않겠는가?


아리스토텔레스는 자신의  <수사학>에서 누군가를 설득할  로고스, 파토스, 에토스가 중요하다고 했다. 여기서 로고스는 논리, 파토스는 감동, 그리고 에토스는 말하는 사람의 인격을 의미한다. 아리스토텔레스는   가지 중에서 에토스가 가장 중요하다고 여겼다. , 같은 말이라도 누가 말하는가가 중요하다는 이다. 논리가 살짝 떨어지고, 이야기가 그다지 감동적이지 않더라도, 그간의 행실을 봤을  믿을 만한 사람이 말하면 듣는다는 것이다. 건강한 에토스, 건강한 말그릇을 소유한 인간이 되고 싶다. 넓은 말그릇을 가진 사람인 ‘하는 것은 이제 지긋지긋하다. 크지 않더라도 뜨거운 여름날   사람이라도 제대로 쉬게 해줄  있는 나무가 되고 싶다. 건강한 내면이 장착되어 나도 자유를 느끼고, 나를 만나는 이도 자유를 느낄  있길 소망한다.

인도: 교훈

신디: 세희

드럼: 재형

싱어: 지민, 준영

PPT: 현주



나의 아버지 되신 주님을 찬양합니다. 주님이 나의 아버지시기 때문에 어떤 어려움도 어떤 상황도 이겨낼 수 있습니다. 왜냐하면 주님은 그 모든 문제보다 훨씬 크신 분이시기 때문입니다. 세상의 평가를 두려워하지 않겠습니다. 오직 주님의 평가를 두려워하겠습니다. 주님이 내가 피할 만한 산성이자 요새이자 소망되시며, 저의 힘이시고 저의 구원자이십니다. 그 주님을 믿음으로 살겠습니다. 



1. 아바 아버지

참고 영상: https://www.youtube.com/watch?v=DlZ-gwTvyuM의 첫번째 곡


연관 말씀:

너희는 다시 무서워하는 종의 영을 받지 아니하고 양자의 영을 받았으므로 우리가 아빠 아버지라고 부르짖느니라 (롬 8:15)



아바 아버지 아바 아버지

나를 안으시고 바라보시는 아바 아버지

아바 아버지 아바 아버지

나를 도우시고 힘주시는 아버지


*주는 내 맘을 고치시고 

볼 수 없는 상처 만지시네

나를 아시고 나를 이해하시네 

내 영혼 새롭게 세우시네


2. 나는 믿네

참고 영상: https://www.youtube.com/watch?v=fj7Zm_U5yCc의 첫번째 곡


연관 말씀:

다만 이뿐 아니라 우리가 환난 중에도 즐거워하나니 이는 환난은 인내를, 인내는 연단을, 연단은 소망을 이루는 줄 앎이로다 (롬 5:3-4)

내가 가는 길을 그가 아시나니 그가 나를 단련하신 후에는 내가 순금 같이 되어 나오리라 (욥 23:10)



내게 허락하신 시련을 통해

나의 믿음 더욱 강하게 자라나고

험한 산과 골짜기 지나는 동안

주께 더 가까이 나를 이끄시네


내가 겪는 시험이 어렵고 힘겨워도

내 주님보다 크지 않네

내 앞의 바다가 갈라지지 않으면

주가 나로 바다 위 걷게 하리


*나는 믿네 주의 능력으로 내 삶 새롭게 되리

나는 믿네 주의 능력으로 담대히 나아가리라

주와 함께 싸워 승리하리라

날마다 믿음으로 나 살아가리




3. 아무 것도 두려워말라

참고 영상: https://www.youtube.com/watch?v=HJpTxJKZfZ4의 첫번째 곡


연관 말씀:

아무 것도 염려하지 말고 다만 모든 일에 기도와 간구로, 너희 구할 것을 감사함으로 하나님께 아뢰라 그리하면 모든 지각에 뛰어난 하나님의 평강이 그리스도 예수 안에서 너희 마음과 생각을 지키시리라 (빌 4:6-7)



아무 것도 두려워말라

주 나의 하나님이 지켜주시네

놀라지마라 겁내지마라

주님 나를 지켜주시네


*내 맘이 힘에 겨워 지칠지라도

주님 나를 지켜주시네

세상의 험한 풍파 몰아칠 때도

주님 나를 지켜주시네


**주님은 나의 산성

주님은 나의 요새

주님은 나의 소망

나의 힘이 되신 여호와



4. 하나님이시여

참고 영상: https://www.youtube.com/watch?v=HJpTxJKZfZ4의 두번째 곡


연관 말씀:

여호와는 나의 빛이요 나의 구원이시니 내가 누구를 두려워하리요 여호와는 내 생명의 능력이시니 내가 누구를 무서워하리요 (시 27:1)



하나님이시여 하나님이시여

주는 나의 하나님이시로다

나의 몸과 마음 주를 갈망하며

이제 내가 주께 고백하는 말


*여호와는 나의 힘이요

여호와는 나의 구원이시니

내가 누구를 두려워하리요

여호와는 생명의 피난처시니


**주의 인자가 생명보다 나으므로

내 입술이 여호와를 찬양하리

내 평생에 주를 찬양하며

주의 이름으로 내 손 들리라


가장 가까운 친구들인 태호와 병일화정부부(+뱃속에 있는 축복이)가 제천에 놀러왔다. 태호는 대전에서, 병일화정부부는 서울에서 여기까지 왔는데 덥다고 집에만 있자니 미안한 마음에 함께 갈만한 곳이 어디 있을까 생각해봤다. 문득 제천 옆 영월에 있는 청령포가 떠올랐다. 청령포는 지나가기만 여러 번 지나가봤지 나도 아직 가보지 않은 곳이었다. 여러 번 방문할 기회가 있었지만 특별한 사람들과 함께 가고 싶어서 남겨둔 곳이었다. 여담이지만 학부시절 남산 중턱에 있는 동국대에 다니면서 남산타워에는 여자친구가 생기면 올라가야겠다고 다짐했던 것과 비슷한 맥락이라고 해야할까? 



▶ 청령포: 단종이 유배되어 보내진 곳


가기 전 날 밤에 나는 청령포가 어떤 곳인지 조사하기 시작했다. 단종의 유배지 정도로만 알고 있었기 때문에 친구들을 가이드해주기 위해서는 좀 더 공부가 필요했다. 역사에 무뇌한인 나는 우선 단종에 대해 조사를 시작했다. 

"태정태세문세예성연중인명선...."에서 단, 즉 문종의 아들이자 세종의 손자단종이었다. 문종은 몸이 병약해서 재위 2년 만에 승하하였고, 그의 아들 단종이 1452년에 왕위를 물려받았다. 그때 그의 나이는 12세에 불과했다. 

문종의 동생 수양대군(세조)은 조카 단종의 자리를 호시탐탐 노리기 시작했다. 1453년(단종 1년) 10월, 수양대군은 한명회 등과 결탁하여 김종서와 황보인을 죽였고, 또한 자신의 동생인 안평대군을 강화도로 귀양 보낸 뒤 스스로 영의정에 올라 권력을 장악했다. 단종이 왕위에 오른지 2년도 채 되지 않은 때였다. 이를 계유정난이라고 한다. 배우 이정재씨가 수양대군의 역을 맡았던 영화 <관상>이 이를 소재로 삼고 있다: "내가 왕이 될 상인가?". 수양대군은 여기서 멈추지 않고 귀양보낸 안평대군에게 사형을 내리고, 막내동생 금성대군은 경기도 연천으로 유배보낸 후, 1455년에 단종을 상왕(죽지 않은 상태에서 왕위를 물려준 왕)으로 물러나게 난 후 스스로 왕위에 올랐다. 

수양대군이 명분도 없이 쿠데타를 일으켜 왕권을 찬탈하는 것을 모두가 묵인하고 있었던 것은 아니었다. 1456년(세조 2년) 6월에 성상문, 박팽년, 하위지, 이개, 유응부, 유성원 등은 암암리에 단종의 복위를 추진했다. 명나라 사신을 대접하는 창덕궁 연회에서 세조를 죽이려고 했으나, 발각되어 모두 죽게 되었다. 이들을 일컬어 사육신이라고 부른다. 참고로 죽진 않았지만 평생 수양대군의 왕위찬탈에 분개하며 죄인과 같이 살았던 김시습, 원호, 이맹전, 성담수, 조려, 남효온 이 6명을 일컬어 생육신이라 한다.

1457년(세조 3년) 6월에는 단종의 장인인 송현수가 단종의 복위를 계획했다는 이유로 잡혀갔다. 세조는 단종을 상왕에서 노산군으로 강등시키고 영월 청령포로 귀양 보냈다. 계속해서 이러한 복위운동이 일어날 것을 두려워한 세조는 끊임없이 단종에게 자살을 강요했고, 결국 단종은 스스로 목숨을 끊었다. 그렇게 그는 1457년(세조 3년) 10월 24일에 17세의 나이로 생을 마감했다. 그는 지금 청령포에서 멀지 않은 영월 장릉에 묻혀 있다.

단종의 지위 변화를 살펴보면 참 마음이 씁쓸하다. 

왕 -> 상왕(죽지 않은 상태에서 왕위를 물려준 왕) -> 노산군 -> 서인(관부의 낮은 벼슬아치) 


▶ 청령포 방문

제천시내에서 약 30분간 차를 몰고나니 우리는 어느덧 청령포에 도착했다. 청령포는 배를 타야지만 들어갈 수 있는 곳이었다. 

소나무 숲으로 우거진 청령포의 모습.


배를 기다리면서


강폭은 그다지 넓지 않았기에 우리는 배를 타자마자 내렸다. 우리 눈 앞에는 짧은 자갈밭과 그 너머 울창한 소나무 숲이 펼쳐졌다. 이날은 상당히 더웠지만 소나무 숲으로 들어가니 꽤 시원했다. 

얼마 들어가지 않아 건축물들이 보이기 시작했다. 단종이 살던 기와집(단종어소)과 하인들이 살던 초가집이 복원되어 있었다. 또한 그 옆에는 단묘재본부시유지비라는 비석이 세워져있다. 이는 1763년(영조 39년)에 영조가 세운 것으로 단종이 유배되어 살던 곳임을 증명하는 내용을 담고 있다.  

단종어소 옆에서 아내와 로아. 로아야 너 이때 참 작았었구나 ㅎㅎ


단종어소를 지나서 숲으로 들어가면 아주 큰 소나무가 하나 보인다. 관음송(천연기념물 제349호)이라는 이름을 갖고 있다. 관음송은 단종이 유배 온 것을 보고 오열하는 소리를 들은 소나무라는 뜻이라고 한다. 수령이 600년에 키가 30미터나 된다. 실제로 보면 무지 크다. 


관음송 앞 병일, 화정 그리고 뱃속에 축복이.


관음송 앞에서 나, 태호, 병일. 대학교때 이 친구들을 만나게 되어 참 행복하다.


길을 따라 언덕으로 올라가면 노산대, 망향탑, 금표비 등을 볼 수 있다. 우리 가정은 로아가 너무 더울 것 같아서 올라가지 않고 관음송 근처에서 친구들이 돌아오길 기다렸다. 


노산대, 망향탑, 금표비를 보러 언덕을 올라가는 태호, 병일, 화정 그리고 뱃속의 축복이.



▶ 정리


8월에 방문하고 작성을 시작했는데 이런저런 바쁜 일에 치여 지금 11월 말이 다 되어서야 글을 마무리하게 되었다. 그 사이에 축복이는 건강히 태어났고, 우리 로아도 무럭무럭 자랐다. 축복이는 이제 이준이라는 이름을 갖게 되었다. 


친구들과 청령포를 방문한 후에 나는 영화 '관상'을 다시 봤고, 나의 문화유산답사기를 읽고, 알쓸신잡의 영월 편을 챙겨 보았다. 그냥 단종을 더 알고 싶었다. 


나는 왜 단종에 대한 자료를 찾아봤을까? 논문 읽고 연구하고 논문 쓰기에도 바쁜데 그를 알고자 했을까? 왕으로 태어나서 죽음의 길을 가야했던 단종이 그저 불쌍해서였을까? 아니면 수단과 방법을 가리지 않고 자신의 목표를 달성한 세조에 대한 분노 때문이었을까?  


나도 잘 모르겠다. 우리 로아와 이준이가 단종처럼 못된 어른에 의해 희생되는 일이 없어야겠다는 생각뿐이다. 다른 어른들을 탓할 게 아니라, 내가 우리 아이들이 누려야 할 것들을 빼앗아버리는 어른이 되어서는 안 될 것이다. 


우리 아이들은 우리 어른들의 사랑과 관심을 필요로 한다. 나를 포함한 어른들이 많이 하는 거짓말 중에 하나가 "다 너희들을 위한 것이야"가 아닐까 싶다. 밖에서 집에 들어갈 시간도 없이 열심히 일해서 성공하면 나는 성취감을 느끼고 좋을지 몰라도, 아이들은 아빠, 엄마의 빈자리를 크게 느낀다. (열심히 일하는 것이 잘못되었다는 것이 아니라 가정을 내팽겨치고 일에만 몰두하는 것을 지적하는 것이다.) 아이는 돈으로 키우는 게 아니라 사랑으로 키우는 것이다. 내가 더 잘 되고 싶은 욕심 때문에 우리 아이들과 함께 시간을 보내지 못하는 불상사가 없도록 마음을 항상 다잡아야겠다. 





<참고자료>

[1] 유홍준, "나의 문화유산답사기, 남한강편", 창비

[2] https://terms.naver.com/entry.nhn?docId=1146579&cid=40942&categoryId=33383, 네이버 지식백과, "영월 청령포"

[3] https://terms.naver.com/entry.nhn?docId=1079818&cid=40942&categoryId=33383, 네이버 지식백과, "단종"

[4] https://kin.naver.com/qna/detail.nhn?d1id=11&dirId=111001&docId=60507269&qb=64W47IKw6rWw&enc=utf8&section=kin&rank=4&search_sort=0&spq=0&pid=T/GStwpySD8ssbw4vqKsssssslV-495624&sid=VBIt7FbTzcJ7aZM5K/pBaA%3D%3D, 네이버 지식인, 단종이 노산군이 된 이유

[5] https://terms.naver.com/entry.nhn?docId=3584107&cid=47306&categoryId=47306, 네이버 지식백과, "생육신, 사육신의 정신을 물려받다"


지난 번에 주성분분석(PCA)를 포스팅하면서, 고유값 분해가 어떻게 머신러닝에 활용되는지 알아보았다. 오늘 정리하는 선형판별분석(linear discriminant analysis; LDA)도 결국은 어떤 행렬의 고유값 문제로 귀결된다. 고유값 그거 참 신통방통한 친구다. 그러니 고유값 분해에 대해서 아직 잘 모른다면, 공부하는 것이 좋다. 머신러닝, 딥러닝을 연구하는데 있어서 선형대수학에 대한 이해는 필수적이다. 물론 잘 몰라도 사용할 수는 있겠지만, 제대로 이해하고 사용하는 것과는 천지차이다.  



▶ LDA의 물리적 이해


LDA는 다른 클래스에 속하는 데이터들을 선형으로 분류가 가능하도록 데이터 포인트들을 투영시키는 머신러닝 알고리즘이다. LDA는 PCA와 비교해가면서 이해하는 것이 좋다. PCA와 LDA 모두 둘 다 투영(projection)이라는 기법을 사용하기 때문이다.  


PCA는 데이터들을 어떠한 벡터로 투영시켰을 때, 투영들의 분산이 큰 벡터들을 찾는다. 투영들의 분산이 적게 만드는 벡터들은 제거해줌으로 데이터의 차원을 감소시킨다. 고차원의 데이터를 저차원으로 감소시켜 시각화가 가능하게 하거나 노이즈를 제거하는 것이 PCA의 목적이었다. 


반면 LDA는 데이터를 하나의 선으로 투영시킨다. PCA와 달리 데이터들이 어떤 클래스에 속하는지 알아야 한다. 


LDA는 아래와 같은 두 가지 성질을 가진 벡터를 찾는다.

 

1) 데이터 포인트들을 투영시켰을 때 각 클래스에 속하는 투영들의 평균간의 거리의 합이 최대가 되게 하는 벡터. 다른 말로, 클래스 간(between-class)의 거리가 최대가 되게 하는 벡터

2) 데이터 포인트들을 투영시켰을 때 클래스 내의 투영들의 분산이 최소가 되게 하는 벡터. 다른 말로, 클래스 내(within-class)의 분산이 최소가 되게 하는 벡터.


아래 그림을 보면 이게 무슨 말인지 좀 더 이해가 될 것이다. 

 

그림 1. LDA는 클래스 간의 거리가 최대가 되게 하면서, 동시에 클래스 내의 분산이 최소가 되게 하는 벡터를 찾는다.


그림 1과 같이 클래스 내의 분산이 최소가 되게 하고, 클래스 간의 거리가 최대가 되게 하는 벡터를 찾아 데이터 포인트들을 투영시키는 것이 LDA가 하는 일이다. 



▶ LDA의 수학적 이해


이제 LDA가 하는 일을 수식 유도 과정을 통해 살펴보자. 물리적으로 이해한 것이 수학적 이해를 통해 더 깊어질 것이다. 


먼저 수식 유도 과정에 쓰는 기호들을 먼저 정리하고 가겠다. 


: 클래스 수

: 클래스 i 내 샘플의 개수

: 전체 샘플의 개수

: 클래스 i 내 j 번째 샘플


여기서



임을 쉽게 알 수 있다. 


클래스부터 클래스까지의 데이터포인트들을 나열하면 아래와 같을 것이다.



이 데이터 포인트들의 벡터로의 투영을 생각해보자. 여기서 벡터는 우리가 원하는 조건들을 만족시키는 그 벡터다.



이제 이 투영들을 가지고 두 가지를 구할 것이다. 


1) 클래스 간의 거리의 합

2) 각 클래스 내의 분산의 합


클래스 간의 거리의 합은 클수록 좋고, 각 클래스 내의 분산의 합은 작을 수록 좋다는 것이 LDA의 기본 원리이기 때문이다. 



1) 클래스 간의 거리의 합


그러면 먼저 클래스 간의 거리의 합에 대해서 구해보자. 클래스 간의 거리는 각 클래스의 투영들의 평균 간의 거리로 구한다. 클래스 i에 속하는 데이터 포인트들의 투영들의 평균은 아래와 같이 구할 수 있다.



여기서 



는 클래스 i의 데이터 포인트들의 평균을 의미한다. 즉, 투영 전의 데이터 포인트들의 평균이다. 그럼 이제 클래스 평균 간의 거리를 모두 더한다. 만약 클래스가 3개라면 3개 중에 2개를 순서에 상관없이 선택하는 조합과 같으므로 총 개의 거리를 구해서 더해야 한다. 클래스 1과 클래스 2의 거리, 클래스 1과 클래스 3의 거리, 클래스 2와 클래스 3의 거리를 구해서 더해야 한다. 만약 클래스가 L개라면, 개의 거리를 구해서 더해야 한다. 이를 식으로 나타내면, 


 

와 같이 매우 길다. 이것을 시그마를 이용해서 간단히 표현하면, 



로 쓸 수 있다. 이것은 아래와 같이 전개된다.



여기서 between-class scatter matrix라고 불리고, 아래와 같이 정리가 가능하다. 좀 길지만 한 줄 한 줄 적어가면서 따라가면 그다지 어렵진 않다. 선형대수학에 대한 지식이 부족하면 그냥 결과만 확인해도 무방하다. 



마지막 줄에서 



는 전체 데이터 포인트들의 평균이다. 왜냐하면, 


 


이기 때문이다. 따라서 이 전체 데이터 포인트의 평균을 의미하는 기호로 놓으면, 



이 된다. 따라서 between-class scatter matrix는 다음과 같이 계속해서 정리된다. 



between-class scatter matrix에 대해 길게 정리했는데, 처음과 끝만 남겨두면 다음과 같다. 



위 식을 잘 살펴보면, 각 클래스의 평균 사이의 거리들의 합은 각 클래스의 평균과 전체 평균간의 거리들의 합과 같다는 뜻임을 알 수 있다(그림2 참고). 


그림 2. between-class scatter matrix의 함의: 각 클래스 평균 사이의 거리들의 합은 각 클래스 평균과 전체 평균간의 거리들의 합과 같다.



2) 각 클래스 내의 분산의 합


이제 두번째로 각 클래스의 투영들의 분산의 합을 구하자. 우선 클래스 i의 투영들의 분산은 다음과 같다. 



따라서 모든 클래스의 투영들의 분산의 합은 아래와 같이 계산된다. 



여기서 는 within-class scatter matrix라고 불린다.



이 식을 잘 살펴보면 즉 각 클래스 내의 데이터포인트들과 클래스의 평균 사이의 거리를 모두 더한 것임을 알 수 있다(그림3 참고).


그림3. within-class scatter matrix의 함의: 각 클래스 내의 데이터포인트들과 각 클래스의 평균 사이의 거리를 모두 더한다.



3) 클래스 간의 거리는 최대로, 클래스 내의 분산은 최소로


클래스 간의 거리의 합과 클래스 내의 분산의 합을 구했으므로 이제 아래와 같은 최적화 문제를 풀면 우리가 원하는 그 벡터를 찾을 수 있다. 그 벡터란 데이터포인트들을 그 벡터 위로 투영시켰을 때 클래스 간의 거리는 멀게 하고, 클래스 내의 분산은 크게 하는 벡터를 의미함을 잊지 말자. 



분자에 클래스 간의 거리가 놓여있고 분모에 클래스 내의 분산이 놓여있다. 이 경우 분자는 클수록 좋은 것이고 분모는 작을 수록 좋은 것이므로 이 분수가 최대가 되게 하는 벡터를 찾으면 되는 것이다. 벡터의 경우 크기는 중요하지 않고 방향만 중요하므로, 분모를 1이 되게 하는 제약 조건을 주어도 무방하다. 즉, 다음과 같이 쓸 수 있다. 



이는 제약 조건이 있는 최적화 문제이므로 라그랑주 승수법에 의해 제약 조건이 없는 최적화 문제로 바꿔줄 수 있다. 라그랑주 승수법은 목적함수와 제약 조건을 새로운 변수 를 이용해 보조방정식을 만든 후에, 모든 변수에 대한 편미분 값이 0이 되는 변수의 해를 찾는 것이다. 라그랑주 승수법에 의해 만들어진 보조방정식은 다음과 같다. 


이 방정식을 두 개의 변수에 대해 각각 편미분한다.  

 

따라서, 위의 최적화 문제는 아래와 같은 일반화된 고유값 문제의 최대 고유값을 찾는 것으로 해결됨을 알 수 있다.

 

결국 PCA와 같이 고유값 문제로 LDA도 수렴되었다. 큰 순서대로 여러 개의 고유값들을 찾는 PCA와 달리, LDA는 단 하나의 가장 큰 고유값을 찾아준다.  




 커널 기반 LDA (KLDA)


KLDA는 말 그대로 커널 기법을 이용해 주어진 데이터 포인트들을 고차원의 특성 공간으로 사상해준 다음에 LDA를 적용하는 것이다. 수학적 유도는 생략한다. 



 LDA 활용 데이터 분석 예제


라벨 값을 가진 2차원 데이터 포인트들에 LDA를 활용해서 분류하는 예제를 하나 구현해보겠다. 클래스의 개수는 2개이므로 데이터를 두 개의 그룹으로 분류하는 문제이다. 우선 데이터는 아래와 같이 분포되어 있다.

그림4. 데이터 포인트들


빨간색 클래스(class1)에 속하는 데이터가 4개, 파란색 클래스(class2)에 속하는 데이터가 3개이다. 우리는 LDA를 통해 찾은 선은 그림 5와 같다. 


그림5. 데이터 포인트들과 LDA로 찾아낸 벡터(선). 이 선으로 투영되었을 때 위에서 언급한 두 가지 조건이 만족된다.


이 선 위로 데이터 포인트들을 투영시키면 그림 6과 같다. 


그림6. 데이터 포인트들이 선 위로 투영된 결과.


투영 결과 두 클래스가 잘 분리되어 있고, 동일한 클래스 내의 데이터포인트들은 가까이 모여있음을 확인할 수 있다. 그러면 이제 클래스를 모르는 데이터가 있다고 가정해보자(그림 7).


그림7. 어떤 클래스에 속하는지 모르는 새로운 데이터 포인트(연두색).


새로운 데이터의 투영과 클래스1의 투영들과의 거리, 새로운 데이터의 투영과 클래스2의 투영들과의 거리를 비교하면 어떤 그룹에 속하는지 판단할 수 있다. 물론 이 경우에는 눈으로도 분명히 확인되지만 말이다. 


그림8. 테스트 데이터 포인트가 그 선으로 투영된 모습


그림9. 예측 결과 테스트 데이터 포인트는 class1에 속한다고 판정되었다.


 

이상의 내용을 MATLAB으로 코딩했다. 코드는 아래와 같다. 주석을 상세히 달아놓았다. 


clc, clear, close all


cls1_data = [2.93 6.634; 2.53 7.79; 3.57 5.65; 3.16 5.47]; % class1인 데이터 포인트들

cls2_data = [2.58 4.44; 2.16 6.22; 3.27 3.52]; % class2인 데이터 포인트들


% mean

E_cls1 = mean(cls1_data); % class1 데이터 포인트들의 평균값

E_cls2 = mean(cls2_data); % class2 데이터 포인트들의 평균값

E_all = mean([cls1_data; cls2_data]); % 전체 데이터 포인트들의 평균값


% 데이터 분포 그림으로 확인

plot(cls1_data(:, 1), cls1_data(:, 2), '*r'); % class1인 데이터 포인트들

hold on 

plot(cls2_data(:, 1), cls2_data(:, 2), '*b'); % class2인 데이터 포인트들

axis([0 10 0 10]);


% between-class scatter matrix

x1 = E_cls1 - E_all;

x2 = E_cls2 - E_all;


Sb = (4/7)*x1'*x1 + (3/7)*x2'*x2;


% within-class scatter matrix

y1 = 0;

for i = 1:4

   y1 = y1 + (cls1_data(i, :) - E_cls1)'*(cls1_data(i, :) - E_cls1); 

end


y2 = 0;

for i = 1:3

   y2 = y2 + (cls2_data(i, :) - E_cls2)'*(cls2_data(i, :) - E_cls2); 

end


Sw = (4/7)*y1 + (3/7)*y2;


% 데이터포인트들을 투영시킬 벡터 찾기

[eig_vec, eig_val] = eig(inv(Sw)*Sb); % (Sw^-1)Sb 행렬의 고유값과 고유벡터 구하기

[largest_eig_val, index] = max(max(eig_val)); % 가장 큰 고유값 찾기

vector = eig_vec(:, index); % 가장 큰 고유값에 대응하는 고유벡터, 우리가 찾는 바로 그 벡터(방향)!


% 그 벡터로 데이터포인트 투영

new_cls1_data = cls1_data*vector;

new_cls2_data = cls2_data*vector;


% 그래프에 그 벡터 그리기

a = vector(2)/vector(1); % 그 벡터의 기울기 

plot([0, 10], [0, 10*a], '-g'); % 그 벡터 그리기 (원점에서부터 x=10에 해당하는 y값까지만 그렸음) 



% 데이터포인트들이 투영된 모습 그리기

for i = 1:4

    new_x = (cls1_data(i, 1) + a*cls1_data(i, 2))/(a^2 + 1);

    new_y = a*new_x;

    plot(new_x, new_y, '*r'); % class 1 데이터포인트들이 그 벡터에 투영된 모습

    plot([cls1_data(i, 1), new_x], [cls1_data(i, 2), new_y], '--k');

end


for i = 1:3

    new_x = (cls2_data(i, 1) + a*cls2_data(i, 2))/(a^2 + 1);

    new_y = a*new_x;

    plot(new_x, new_y, '*b'); % class 2 데이터포인트들이 그 벡터에 투영된 모습

    plot([cls2_data(i, 1), new_x], [cls2_data(i, 2), new_y], '--k');

end


% 새로운 데이터 포인트의 클래스 예측하기

test_data = [4.81, 3.46];

plot(test_data(1), test_data(2), '*g'); % 테스트 데이터 포인트 그리기

result = test_data*vector; % 그 벡터로 테스트 데이터 포인트 투영


projected_test_data_x = (test_data(1) + a*test_data(2))/(a^2 + 1);

projected_test_data_y = a*projected_test_data_x;

plot(projected_test_data_x, projected_test_data_y, '*g'); % 그 벡터로 테스트 데이터 포인트가 투영된 모습

plot([test_data(1), projected_test_data_x], [test_data(2), projected_test_data_y], '--k');


temp1 = new_cls1_data - result; % 클래스1에 속하는 데이터의 투영들과 테스트 데이터의 투영의 차이

temp2 = new_cls2_data - result; % 클래스2에 속하는 데이터의 투영들과 테스트 데이터의 투영의 차이


if (min(abs(temp1)) < min(abs(temp2)))

    prediction = 'class1(red)'

else

    prediction = 'class2(blue)'

end




 정리


LDA도 PCA와 유사하게 고유값 분해와 투영이라는 방식을 활용한다. PCA는 데이터를 좀 더 잘 이해하기 위해 데이터의 분산이 넓어지는 벡터들로 투영시켜주는 것이라면, LDA는 데이터를 클래스에 따라 분류하기 위해 클래스간의 거리는 멀게해주고 클래스내의 분산은 크게해주는 벡터로 투영시켜주는 것이다. 


포스팅을 하면서 저 스스로 이해가 한결 더 깊어짐을 느낍니다. 그러나 여전히 부족함이 있는 글이라 생각됩니다. 제 설명이 잘못된 부분이 있으면 피드백 해주시면 감사하겠습니다. 한 수 가르쳐주세요! 또한 조금이나마 이 글이 도움이 되셨다면 댓글이나 공감으로 격려해주시면 감사하겠습니다.^^ 




<참고자료>

[1] http://www.cnblogs.com/pinard/p/6244265.html, LDA에 대한 중국 블로그의 설명

[2] https://blog.naver.com/macchiholic/221323294567, 점과 직선 사이의 거리 구하는 공식 

인도+기타: 교훈

신디: 세희

드럼: 재형

싱어: 지민, 준영

PPT: 현주



저를 한없이 용서해주시는 주님, 감사합니다. 주님이 저를 참아주시고 사랑해주시고 희생하셨던 것처럼, 저도 참고 사랑하고 희생하며 살기 원합니다. 내가 죽고 주가 사는 인생되기 원합니다. 내 안에서 내가 산다면 육체의 열매를 맺을 뿐입니다. 그러나 내 안에 주가 사시면 성령의 열매를 맺을 줄로 믿습니다. 하루를 살아도 주님과 함께 살기 원합니다. 매순간 저와 동행해주세요. 매순간 저를 다스려주세요.  


1. 완전하신 나의 주

참고 영상: https://youtu.be/smAjIRIqJRw


완전하신 나의 주 의의 길로 날 인도하소서

행하신 모든 일 주님의 영광 다 경배합니다


*예배합니다 찬양합니다

주님만 날 다스리소서

예배합니다 찬양합니다

주님 홀로 높임 받으소서



2. 나는 죽고 주가 살고

참고 영상: https://youtu.be/yZ5zVdAawNo


참고 말씀: 

형제들아 내가 그리스도 예수 우리 주 안에서 가진 바 너희에 대한 나의 자랑을 두고 단언하노니 나는 날마다 죽노라 (고전 15:31)

육신을 따르는 자는 육신의 일을, 영을 따르는 자는 영의 일을 생각하나니 육신의 생각은 사망이요 영의 생각은 생명과 평안이니라 (롬 8:5-6)

내가 그리스도와 함께 십자가에 못 박혔나니 그런즉 이제는 내가 사는 것이 아니요 오직 내 안에 그리스도께서 사시는 것이라 이제 내가 육체 가운데 사는 것은 나를 사랑하사 나를 위하여 자기 자신을 버리신 하나님의 아들을 믿는 믿음 안에서 사는 것이라 (갈2:20)


나는 죽고 주가 살고 나는 없고 주만 있으면

이땅에서 하나님의 아름다운 나라 이루리


*내 안에서 내가 산다면 육체의 열매 맺으며

내 안에서 주가 산다면 성령의 열매를 맺으리


**나는 죽고 주가 살면 나는 죽고 주가 살면

나는 죽고 주가 살면 주의 나라 이루리



3. 예수님은 사랑이라

참고 영상: https://youtu.be/Z8wdwrb775k


참고 말씀: 

사랑하는 자들아 우리가 서로 사랑하자 사랑은 하나님께 속한 것이니 사랑하는 자마다 하나님으로부터 나서 하나님을 알고 사랑하지 아니하는 자는 하나님을 알지 못하나니 이는 하나님은 사랑이심이라 (요일 4:7-8)



예수님은 사랑이라 날 끝없이 기다린 그 사랑

그 사랑이 날 찾아왔네 예수님은 사랑이라


예수님은 사랑이라 생명까지 내어준 그 사랑

그 사랑이 날 찾아왔네 예수님은 사랑이라


*내 안에 흐르는 예수의 보혈

온 세상에 흘러 모두 알게 되리


예수님은 사랑이라 죽음까지 이기신 그 사랑

그 사랑이 날 찾아왔네 예수님은 사랑이라

그 사랑이 내 안에 있네 예수님은 사랑이라



4. 예수, 늘 함께 하시네

참고 영상: https://youtu.be/4v0oHeJ8-2k


참고 말씀: 

하늘에 계시는 주여 내가 눈을 들어 주께 향하나이다 상전의 손을 바라보는 종들의 눈 같이, 여주인의 손을 바라보는 여종의 눈 같이 우리의 눈이 여호와 우리 하나님을 바라보며 우리에게 은혜 베풀어 주시기를 기다리나이다 (시 123:1)



1. 고단한 인생길 힘겨운 오늘도 예수 내 마음 아시네

지나간 아픔도 마주할 세상도 예수 내 마음 아시네


2. 하루를 살아도 기쁨으로 가리 예수 늘 함께 하시네

후회도 염려도 온전히 맡기리 예수 늘 함께 하시네


*믿음의 눈들어 주를 보리 이 또한 지나가리라

주어진 내 삶의 시간 속에 주의 뜻 알게 하소서



대부분의 사람들이 인생에서 적어도 한 번은 자기소개서를 쓰게 되는 것 같다. 나같은 경우에는 중국 대학원에 석사를 지원할 때와, 박사를 지원할 때 두번 자기소개서를 썼었다. 


자기소개서는 말 그대로 자기를 소개하는 것이다. 남을 소개하는 것이 아니다. 그러므로 최대한 정직하게 자신에 대해서 쓰는 것이 중요하다. 그러나 자기소개서를 읽을 대상을 잘 생각하면서 쓰는 것이 필요하다. 그들은 나에 대해서 무엇을 알고 싶을까? 아마도 지원하는 부서의 업무를 내가 얼마나 잘해낼 수 있는지를 알고 싶을 것이다. 그래서 자신이 갖고 있는 능력과 경험을 잘 부각시키는 것이 필요하다. 나한테 없는 능력과 내가 경험하지 않은 것을 쓰는 것은 사기 행위이다. 


나의 스토리는 힘이 있다. 나와 똑같은 인생을 경험한 사람은 단 하나도 없다. 그러니 자신감을 갖고, 나에 대해서 쓰자. 



▶ 중국어로 자기소개서 쓰기


중국어수업 교수님께서 중간고사 대체 과제로 자기소개서를 쓰는 것을 내주셨다. 어떤 주제로 쓸까 생각하다가, 최근에 최강희 감독님이 톈진 취안젠 축구 팀의 감독으로 선임되었다는 뉴스 기사가 생각나서, 톈진 취안젠에 데이터분석사로 취업하기 위해 자기소개서를 쓰는 상황을 가정해보았다. 참고로 국가대표 수비수인 권경원 선수도 톈진 취안젠에서 뛰고 있다. 


실제로 지금 당장 여기에 지원할 생각이 있는 건 아니지만, 이런 저런 생각을 하며 쓰다 보니 나중에 이런 분야로도 충분히 취업할 수도 있겠다는 생각이 들었다. 


내가 중국어로 쓴 후에 중국 친구에게 한 번 교정을 받았다. 수정한 부분은 빨간 색으로 표시했다.


自荐信


你们好!我是韩国人。我的中文名字叫沈教勋。我是来应聘天津权健足球俱乐部的。我在网页上看到了你们在招聘数据统计分析人员。我觉得我是个位置的最佳人选。首先,我在天津大学读了硕士研究生,专业就是信息与通信工程,主要的研究领域正好是数据统计分析。我用机器学习算法及深度学习算法分析过大量数据,并且发了四篇有份量SCI论文。我知道不同类别的数据怎么处理可以提取出有效的信息。可以说我是个数据统计分析的专家。第二,我的中文水平相当高,通过了汉语水平能力考试六级,用中文跟中国人沟通没有问题。我英文水平也不低,我发表的论文都是用英文写的。第三,最近韩国的崔康熙先生被选为权健足球队的主教练了。我跟他直接用韩语讨论统计分析结果,便于他透彻理解结果并制定相应战术。第四,我是个足球迷。年幼时我便开始看足球比赛。所以我收集分析关于足球的数据是不累的,反而我享受这份工作。我希望为天津权健俱乐部的发展贡献自己的一份力量。谢谢你们给我应聘的机会。



▶ 교정 받으면서 새롭게 배우거나 점검한 사실


1) 동사 또는 동사구를 나열할 때는 并을 사용한다. 
- 他透彻理解结果并制定相应战术
- 我收集并分析关于足球的数据是不累的。


2) 为~贡献自己的一份力量: ~을 위해 나의 능력을 바치다

- 我希望天津权健俱乐部的发展贡献自己的一份力量。나는 톈진 취안젠의 발전을 위해 나의 힘을 바치고 싶다. 

 

3) 便于: ~하기가 쉽다, ~하기에 편하다

- 我跟他直接用韩语讨论统计分析结果,便于他透彻理解结果并制定相应战术。 


4) 중국 사람들은 자기소개서를 쓸 때 겸손한 어투로 쓴다고 한다. 


5) 有份量: 중량있다, 무게감 있다

- 我发了四篇有份量的SCI论文。나는 무게감 있는 4편의 SCI 논문을 발표했다. 

선형대수학에서 배우는 고유값 분해특이값 분해는 참 여기저기에 많이 사용된다. 아마 고유값 분해, 특이값 분해를 각 연구분야에 사용해서 게재된 논문만해도 아마 몇 만개는 될 것이다(훌쩍 넘을 수도 있다). 그만큼 응용가치가 크다. 오늘은 고유값과 고유벡터와 아주 밀접한 관련이 있는 머신러닝 알고리즘을 소개하려고 한다. 바로 주성분분석(primary component analysis; PCA)인데, 이는 상당히 유용하며 그 유용성 덕에 매우 유명한 알고리즘이다. 일반적으로 간단히 PCA라고 부른다. 



 PCA의 대략적 이해


PCA는 입력 데이터의 상관 계수 행렬(correlation coefficient matrix)에 대해 고유값분해를 해주어, 공헌도가 큰 고유값(즉, 상대적으로 큰 고유값들)과 매칭되는 고유벡터들을 찾아서 입력 데이터를 그 벡터들로 투영시킨다. 이 과정에서 공헌도가 작은 고유값과 매칭되는 고유벡터들은 무시된다. 


이러한 방식으로 PCA는 데이터에서 주성분 벡터를 찾아서 데이터의 차원(dimension)을 축소시킨다. 차원을 축소시킴으로 얻을 수 있는 효과는 아래와 같다. 


1) 2차원 또는 3차원으로 축소하면 시각화(visualization)가 가능해진다. 즉, 고차원 데이터를 저차원의 데이터로 축소해서 눈에 보이게 만들 수 있다는 것이다. 그러므로 데이터를 이해하는데 도움이 된다. 

2) 데이터 내에는 노이즈가 첨가되어 있다. 중요하지 않고 오히려 중요한 신호를 가리는 소음들이다. PCA를 적용하면 이러한 노이즈가 어느 정도 제거된다. 

3) 차원이 축소되었으므로 이후 처리해야할 연산량이 줄어든다.



PCA의 수학적 이해


데이터 포인트들을 어떤 벡터로 투영시키면 투영된 데이터 포인트들의 분산이 비교적 클 것이고, 또다른 어떤 벡터로 투영시키면 분산이 비교적 작을 것이다. 분산이 가장 큰 방향(또는 벡터)이 데이터에서 가장 많은 정도를 담고 있는 방향이다[2]. 즉, 어떤 벡터로 투영된 데이터의 분산이 클수록 데이터를 의미있게 분석할 수 있다. 그러므로 PCA는 투영했을 때 데이터 포인트들의 분산이 큰 벡터들을 찾는다. 


그림1. 투영했을 때 분산이 큰 벡터를 찾는다.



그 벡터들은 곧 데이터의 상관계수행렬의 고유벡터들 중 큰 고유값과 매칭되는 고유벡터들과 같다. 무슨 말인지는 찬찬히 아래를 보면서 이해해가보도록 하자. 이제 PCA가 어떻게 작동하는지 설명하겠다. 


우리에게는 총 N개의 데이터 포인트가 주어졌다. 



각각의 데이터 포인트는 d차원이다. 즉 각각의 데이터 포인트는 d x 1 벡터이다. 


우선 데이터의 평균이 0이 되도록 표준화(normalization) 작업을 해준다. 이 표준화 작업은 머신러닝 또는 딥러닝 알고리즘들을 훈련하기 전에 필수적으로 해준다. 각 특성마다 특성값의 범위가 꽤 다르다. 그러다보니 범위가 큰 어떤 한 두개의 특성에 결과가 좌지우지되곤 한다. 따라서 모든 특성값을 0에서 1사이의 값 또는 -1에서 1사이의 값이 되도록 조정해서 어떤 한 두개의 특성에 좌지우지되지 않게 한다. 여기서는 -1에서 1로 표준화한다.  


편의상 표준화된 데이터 포인트들도 아래와 같이 표현하겠다. 



표준화된 모든 데이터들을 크기가 1인 어떤 단위 벡터(unit vector)로 투영시키면 아래와 같이 쓸 수 있다. 

  


이 투영들의 분산을 구한다. 투영들의 분산이 크게 되는 단위 벡터들을 찾을 것이기 때문이다. 


...(공식1: 투영들의 분산)


여기서 


...(공식2: 상관계수행렬(correlation coefficient matrix))


상관계수행렬이라고 부른다. C를 다시 정리하면,


...(공식2-1: 상관계수행렬)


이제 첫번째 주성분 벡터는 아래의 최적화 문제를 푸는 것에 의해 구해진다. 


...(공식3: 첫번째 주성분 벡터를 구하는 최적화 문제)


즉, 투영했을 때 투영들의 분산이 가장 큰 단위벡터를 구하자는 말이다. 이 문제는 라그랑주 승수법에 의해 풀 수 있다. 라그랑주 승수법은 최적화 문제에 사용되는 수학적 기법으로 최대 또는 최소값을 찾으려는 문제에서 해결방법으로 사용된다[1]. 라그랑주 승수법은 목적함수와 제약 조건을 새로운 변수 를 이용해 보조 방정식을 만든 다음에, 모든 변수에 대한 편미분 값이 0이 되는 변수의 해를 찾는 것이다. 우선 보조 방정식은 아래와 같다. 



이 방정식을 두 개의 변수에 대해 각각 편미분한다. 



로 편미분 한 결과에 좌편에 각각 를 곱해주면,



놀랍게도, 투영의 분산이 상관계수벡터 C의 고유값과 같다는 것이다. 따라서 공식3의 최적화 문제는 아래와 같은 고유값 문제를 푸는 것과 동일해진다. 


...(공식3의 최적화문제가 간단한 고유값 문제가 되었다)


따라서, 우리가 구하고자하는 최대 분산값을 갖게하는 단위벡터는 가장 큰 고유값과 대응되는 고유벡터가 된다. 데이터 포인트들이 큰 고유값들과 대응되는 고유벡터들에 투영되면 데이터는 비교적 크게 분산되어 투영될 것이다.


PCA는 이처럼 상관계수행렬의 큰 고유값들과 대응되는 고유벡터들을 찾아서 투영시킨다. d차원의 데이터였으므로 d보다는 작은 갯수의 고유벡터를 선택해 데이터의 차원을 축소시킨다. 즉 공헌도(contribution rate)가 작은 고유벡터는 무시하겠다는 것이다. 이 공헌도를 계산하기 위해 고유값들을 이용한다. 


k번째 고유값의 공헌도는 아래와 같이 계산한다. 지금 고유값들은 내림차순으로 정렬되어 있다는 것을 기억하자.  


...(공식4: 각 고유값의 공헌도 계산)


공식4를 보면 분모는 전체 고유값의 합이고 분자는 k번째 고유값이므로 해당 고유값이 크면 클수록 공헌도는 크다. k번째 고유값까지의 누적 공헌도(cumulative contribution rate)는 아래와 같이 계산한다.


...(공식5: 고유값의 누적 공헌도 계산)


누적 공헌도가 문턱값(이 값은 0.9가 될 수도 있고, 0.95가 될 수도 있다. 사용자 마음대로 설정 가능하다.) 이상이 되게 하는 k번째 고유값들과 매칭되는 고유벡터들이 최종적으로 투영되는 방향으로 선택된다. 누적공헌도를 이용해서 주성분을 판단하는 방법 이외에도 필요에 따라 사용자가 그냥 몇개의 차원으로 축소시킬지 정할 수도 있다.


만약 그림1의 데이터 포인트들이 3차원이라고 가정하면, 우리는 3개의 주성분을 찾을 수 있다. 즉, 투영했을 때 분산이 가장 큰 3개의 벡터 또는 방향을 찾은 것이다(그림 2 참고). 


그림2. 3차원의 데이터 포인트들이므로 3개의 주성분을 찾았다.

 


여기서 주목할 것은 주성분 벡터끼리는 서로 직각(orthogonal)이라는 사실이다. 3개의 주성분을 찾은 후에 그중 공헌도가 가장 적은 주성분 벡터를 제외한다. 누적 공헌도로 판단했더니 세번째 주성분 벡터는 제외되었다고 가정하자(그림 3 참고).


그림3. 세번째 고유벡터는 공헌도가 작다고 판단되어 제거되었다.

 


그렇다면 이제 데이터 포인트들을 살아남은 2개의 주성분 벡터로 각각 투영시킨다. 그러면 우리는 축에 대한 좌표값과 축에 대한 좌표값을 얻게 될 것이다. 이런 방식으로 PCA는 3차원의 데이터를 2차원으로 축소시킬 수 있다. 




 커널 기반 PCA (KPCA)


우선 커널 기법은 주어진 데이터를 고차원의 특성 공간으로 사상해주는 것이다. 원래 공간에서는 분석하기 어려운 데이터들은 커널 기법을 통해 분석하기 쉬운 분포를 보이곤 한다. http://bskyvision.com/163를 참고하자. 커널 기반 PCA는 데이터 포인트들을 우선 커널 함수를 이용해 고차원 공간으로 사상(mapping)시킨 후에 PCA를 적용하는 것이다. PCA와 커널 기법을 이해했다면 그다지 어렵지 않다. 자주 사용되는 커널에는 크게 3종류가 있다. 


1) 선형 커널

2) 다항식 커널

3) 가우시안 커널


많은 경우에 가우시안 커널이 가장 좋은 성능을 보인다. 모든 경우에 그렇다는 건 아니다. 



 PCA 활용해서 데이터 분석 예제


이제 PCA를 활용해서 어떻게 데이터의 차원을 축소시키고, 그로 인해 어떠한 효과를 볼 수 있는지를 실례를 들어 살펴보겠다. 이를 위해 우리는 윈스콘신 유방암 데이터셋을 활용했다. 이 데이터셋에 대한 상세한 내용은 여기를 참고하자. 

=>http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.names


데이터셋의 샘플들은 여기서 얻었다. 

=> http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/


링크에 들어가서 breast-cancer-wisconsin.data를 클릭하면 숫자들이 나열되어 있는 것을 확인할 수 있다. 이 숫자들은 699개의 샘플에 대한 정보다. 각 샘플당 첫번째 값은 샘플 아이디를 의미(아마도 어떤 사람을 지칭)하고, 2번째 값부터 10번째 값까지는 특성 값들이다(9개의 특성). 그리고 마지막 11번째 값은 라벨값으로 2는 양성(benign), 4는 악성(malignant)을 뜻한다. 그니까 유방암 환자들과 일반인들의 세포핵에서 측정한 결과들을 특성화한 것이다. 


9개의 특성은 아래와 같이 구성되어 있다. 


1) clump thickness 세균 덩어리의 두께

2) uniformity of cell size 세포 크기의 균일성

3) uniformity of cell shape 세포 모양의 균일성

4) marginal adhesion 

5) single epithelial cell size 단일 상피 세포 크기

6) bare nuclei

7) bland chromatin

8) normal nucleoli

9) mitoses


의학적 용어라 정확한 의미는 잘 모르겠다. 하지만, 유방암의 유무를 판단하는데 도움이 될만한 특성들인 것은 분명한 듯하다. 암튼 몰라도 되니 넘어가자. 


699개의 샘플 중에 16개는 특성값 중에 누락된 정보가 있어서 그 샘플들은 제거했다. 그래서 나는 총 683개의 샘플을 가지고 분석을 실시했다. 정리된 자료가 필요하시다면 이것을 사용하셔도 좋습니다.  breast_cancer1.txt


이 샘플들은 9개의 특성을 갖고 있기 때문에, 9차원이다. 9차원의 정보를 시각화한다는 것은 불가능하다. 그래서 PCA를 활용해서 2차원으로 차원 축소한 다음에 데이터를 분석해보려고 한다. 이 9개의 특성들이 유방암을 판단하기에 유용한 특성들인지를 살펴볼 것이다.


매트랩으로 코드를 구현해보았다. 매트랩 내의 pca 함수를 사용하지 않고 직접 코딩해보았다. 공헌도로 몇 개의 주성분을 남길지 결정하지 않고, 2개의 주성분만을 남기도록 자의적으로 설정했다. 9차원의 정보를 2차원으로 시각화할 것이기 때문이다.   


clc, clear, close all


data = load('breast_cancer1.txt');

feature = data(:, 2:10); % 특성값

label = data(:, 11);  % 라벨값


[nfeature, mu, sigma] = zscore(feature); % 특성값이 -1에서 1사이, 평균 0이 되도록 표준화.  


cov_mat = cov(nfeature);

[eigvec, eigval] = eig(cov_mat);

eigval1 = diag(eigval);

[sorted_eigval, ind] = sort(eigval1, 'descend');

sorted_eigvec = eigvec(:, ind);


Y = nfeature*sorted_eigvec(:, 1:2); % dimension reduction


figure(1),

hold on

plot(Y(label==2, 1), Y(label==2, 2), 'b*'); % 라벨값 2는 양성

plot(Y(label==4, 1), Y(label==4, 2), 'ro'); % 라벨값 4는 음성


xlabel('first primary component')

ylabel('second primary component')

legend('양성', '악성')


PCA를 적용한 결과 만들어진 그래프를 확인하자. 


그림 4. 유방암 데이터에 PCA를 적용한 결과.


그림4에서 볼 수 있듯이, 양성과 악성인지 이 특성들을 이용해 어느 정도 판단할 수 있음을 알 수 있다. 양성인 경우 2개의 주성분으로 투영된 샘플들의 값이 거의 모여있고 비교적 작은 값들을 갖는다. 반면, 음성인 경우 투영된 샘플들의 값이 비교적 클 뿐더러 값들의 분산도 꽤 크다. 


유방암 환자인지 아닌지 모르는 사람에 대한 샘플이 있다면, 이 두 개의 주성분으로 투영시킴으로 대강 판단할 수 있을 것이다. 투영된 결과 악성 샘플들과 결과가 비슷한 것 같다면, 의사는 이 결과를 가지고 진단 받은 사람에게 유방암일 가능성이 크니 큰 병원에 가시거나 정밀검사를 받을 것을 권유할 것이다. 


물론 더 정확하게 판단하려면 더 좋은 특성들을 도출하거나, 이 중 어떤 특성들을 제거하거나, SVM, CNN 등으로 분류기를 정확하게 훈련시켜야 할 것이다. 


이렇게 9차원의 특성값들과 라벨값들의 관계를 2차원으로 축소시켜서 눈으로 볼 수 있게 되니 데이터를 더 잘 이해할 수 있게 되었다. 



 정리


PCA는 데이터의 차원 축소를 위한 툴이다. 이를 위해 데이터 내에 있는 주성분들을 찾아낸다. 주성분 중에서 비교적 중요한 방향으로 원래 데이터 포인트들을 투영시킨다. 그 과정 중에 차원이 축소된다. 차원을 축소함으로 고차원의 데이터를 시각화해서 데이터를 더 잘 이해할 수 있다. 차원을 축소하는 가운데 데이터 내의 일종의 노이즈들이 제거될 수도 있다. 또한 차원을 축소하므로 데이터 내에 있는 중요한 정보만을 남길 수도 있다. 


정성들여 글을 작성했습니다. 도움이 되셨다면 공감 눌러주시고, 댓글 남겨주시면 감사하겠습니다. 질문은 언제든 환영입니다. 여기까지 끝까지 성실하게 읽으신 분께는 분명 어떠한 소득이 있었을 것이라 믿고 가벼운 마음으로 글을 마칩니다.^^  




<참고자료>

[1] https://wikidocs.net/5719, 라그랑주 승수법에 대한 설명

[2] 안드레아스 뮐러, 세라 가이도 지음, 박해선 옮김, "파이썬 라이브러리를 활용한 머신러닝", 한빛미디어

내가 석사 기간동안 주요 연구했던 분야는 이미지 품질 평가(image quality assessment, IQA)이다. 막 시작한 박사 과정 중에도 이 분야에 대해서 중점적으로 연구할 것 같다. 이미지 품질 평가는 말 그대로 이미지의 품질을 평가하는 것이다. 디지털 이미지의 경우 전송하고, 압축하고, 처리하는 과정 속에 이미지가 훼손되곤 한다. 왜곡 현상이 심하면 이미지를 이용하는 사람들의 만족도는 그만큼 떨어질 수 밖에 없다. IQA는 이미지가 눈으로 보기에 얼마나 훼손되었는가를 평가하는 연구분야이다. 실제로 왜곡되었지만 눈으로 잘 감지되지 않은 경우도 있다. 우리가 평가하는 것은 단순히 숫자적으로 얼마나 왜곡되었는가가 아니라, 지각적으로 즉 감지하기에 얼마나 왜곡되었는가이다. 


IQA는 이미지 및 비디오 품질 모니터링, 이미지 노이즈 제거와 이미지 복구 등 여러 분야에서 적용되고 있다[4]. 구체적인 예를 들면, 2D IQA 알고리즘 중 하나인 VIF의 경우 넷플릭스 VMAF 비디오 품질 모니터링 시스템에 활용되고 있다[2]. 또 다른 2D IQA 알고리즘 SSIM 역시 비디오 품질 평가 시스템에 널리 활용되고 있다[3].  


IQA에 관해 좀 더 자세한 설명을 원한다면, 이전 포스팅의 초반부를 참고하세요. =>

http://bskyvision.com/177


다른 영상 처리 분야들과 마찬가지로, IQA에서도 머신러닝과 딥러닝이 차지하고 있는 위치는 상당하다. 대부분의 영상 처리 분야들은 다음과 같은 방식의 알고리즘들을 갖고 있다. 이미지를 주파수 영역으로 변환하거나 엣지 정보만을 도출하는 등 나름의 전략으로 우선 전처리(preprocessing)한 후에 전처리된 이미지로부터 일련의 특성을 도출하고, 그 특성과 라벨을 이용해서 머신러닝 또는 딥러닝을 훈련시켜 회귀(regression) 문제 또는 분류(classification) 문제를 다룬다. 라벨이 없는 경우에는 데이터 내의 특성만을 가지고 군집(clustering) 문제를 다루기도 한다. 참고로 라벨값의 유무에 따라 회귀 문제와 분류 문제는 지도학습에 속하고, 군집 문제는 비지도학습에 속한다. 


오늘 이 포스팅에서는 특별히 3D IQA 분야에서 머신러닝 및 딥러닝이 어떻게 활용되어 왔는가를 정리하려고 한다. 



▶ Support vector machine (SVM) 


SVM은 데이터를 선형으로 분리하는 최적의 선형 결정 경계를 찾는 지도학습 알고리즘이다. 클래스가 다른 데이터들을 가장 큰 마진으로 분리해내도록 정중간에 있는 선 또는 면을 찾아내는 것이다. 그 선 또는 면을 결정 경계라고 부른다. SVM이 회귀 분석에 사용될 때는 support vector regressor (SVR)로 불리곤 한다. 


SVM에 대한 자세한 설명은 링크된 포스팅을 참고하자.

=> http://bskyvision.com/163 



1) Chen M J, Cormack L K, Bovik A C. No-Reference Quality Assessment of Natural Stereopairs[J]. IEEE Transactions on Image Processing, 2013, 22(9):3379-3391.


Chen 등은 먼저 3D 지각을 고려하기 위해 Disparity 맵과 Uncertainty 맵을 산출했고, 2D 지각을 고려하기 위해 Cyclopean 맵을 산출했다. Disparity 맵은 시차를 나타내는 맵이고, Uncertainty 맵은 좌우 두 눈으로 얻은 이미지들의 유사하지 않은 정도를 나타내는 맵이다. Cyclopean 맵은 사람의 좌, 우 두 눈으로 각각 얻은 두 개의 이미지를 뇌에서 하나로 융합해낸 것을 모델링한 이미지이다. 


저자들은 이 세 개의 맵에서 지각품질과 관련된 특성을 도출한 다음, 이 특성들을 SVM에 넣어주어 스테레오 이미지가 대칭적으로 왜곡되었는지 비대칭적으로 왜곡되었는지를 먼저 확률적으로 판단했다. 좀 더 정확히 말하면, 스테레오쌍이 대칭적으로 왜곡되었을 확률과 비대칭적으로 왜곡되었을 확률을 각각 구한 것이다. 


그 다음에 대칭적으로 왜곡된 스테레오쌍에서 도출된 특성으로 훈련된 SVR과 비대칭적으로 왜곡된 스테레오쌍에서 도출된 특성으로 훈련된 SVR을 이용해서 각각의 품질 점수를 회귀분석을 통해 얻었다. 그들은 스테레오쌍의 대칭 왜곡과 비대칭 왜곡 확률을 가중치로 삼아 두 개의 품질 점수를 가중합해서 최종 품질 점수를 계산했다.


정리하자면, 그들은 스테레오쌍이 대칭적으로 왜곡되었는지, 비대칭적으로 왜곡되었는지를 확률적으로 판단하기 위해 SVM을 사용했고, 품질 스코어를 구하기 위해 회귀분석을 시행하는 SVR을 사용했다. 



2)  Su C C, Cormack L K, Bovik A C. Oriented correlation models of distorted natural images with application to natural stereopair quality evaluation.[J]. IEEE Transactions on Image Processing, 2015, 24(5):1685-1699.


Su 등은 먼저 스테레오 쌍을 이용해서 convergent cyclopean 이미지를 산출한 후에, 공간 영역 일변량() 특성, 웨이블릿 영역 일변량 특성 및 이변량 밀도 및 상관 NSS 특성을 도출했다. 그 도출한 특성들로 SVR을 훈련해서 회귀분석을 실시함으로 품질 점수를 예측했다. 



3) Ko H, Song R, Kuo C C J. A ParaBoost Stereoscopic Image Quality Assessment (PBSIQA) System[J]. Journal of Visual Communication & Image Representation, 2017.


Ko 등은 우선 다양한 왜곡 현상을 몇 개의 유형으로 한정지어 분류한 다음, 유형별로 품질 평가기들을 만들었다. 그러고 난 후 거기에서 얻은 중간 점수들을 하나로 통합하였다. 왜곡 유형별로 하나씩, 총 9개의 SVR이 유형별 품질 평가기로 사용되었다. 그들은 거기서 얻은 9개의 중간점수들을 특성으로 삼아 또 다른 하나의 SVR을 훈련시켜 최종 점수를 얻었다. 




▶ k-nearest neighbors (kNN)

지도학습 중의 하나인 kNN의 기본적인 개념은 이름에서부터 잘 드러난다. 어느 그룹에 속하는 것인지 알고 싶은 새로운 데이터로부터 k개의 가장 가까운 이웃들을 찾아라! 왜 k개의 가까운 이웃들을 찾는가? 찾은 k개의 데이터 중에 더 많은 수의 데이터가 포함된 그룹을 새로운 데이터의 그룹으로 판단하겠다는 것이다. 


만약 k가 1이면 새로운 데이터를 중심으로 가상의 원 (2차원인 경우) 또는 구(3차원인 경우)를 확장해 가다가 만나는 첫번째 데이터의 그룹을 새로운 데이터의 그룹으로 삼는다. k가 9이면 9개의 데이터를 만날 때까지 원이나 구를 확장시킨다. 그 중 만약 7개가 어떠한 한 그룹에 속하는 데이터라면 새로운 데이터도 그 그룹으로 판단한다. 즉, kNN에서 k는 새로운 데이터가 속한 그룹을 알아내기 위해 인접 데이터를 k개 찾겠다는 뜻이다[1]. 이때 k는 항상 홀수로 설정되어야 한다. 만약 짝수가 가능해서 k=4로 설정했는데 2개는 이 그룹에, 2개는 다른 그룹에 속하면 판단할 방법이 없기 때문이다.



1) Zhou W, Yu L. Binocular Responses for No-Reference 3D Image Quality Assessment[J]. IEEE Transactions on Multimedia, 2016, 18(6):1077-1084.


Zhou와 Yu는 양안 에너지 반응 맵과 양안 경쟁 반응 맵을 만들어서 양안 시각 인지를 시뮬레이션한 후, 두 맵의 지역 패턴들을  품질 평가를 위한 특성으로 활용했다. 특성 도출 후에 품질 점수를 얻기 위해 kNN을 사용했다. kNN을 어떻게 사용했는지 좀 더 자세히 설명하겠다. 그들은 테스트할 스테레오쌍에서 특성을 도출한 후, kNN을 통해 5개의 인접 데이터를 찾았다(저자들이 k = 5로 설정했기 때문에). 이때 그 5개의 인접데이터와 테스트 스테레오쌍의 데이터 사이의 거리도 각각 계산된다. 5개의 인접 데이터 모두 각각의 라벨값을 갖고 있는데, 새로운 데이터의 라벨값을 예측하기 위해 그 라벨값들에 거리값들을 가중치로 곱한 후 더해줬다. 다시 말하자면, kNN에 의해 찾아진 5개의 데이터 중 가까울수록 데이터의 라벨값에 더 큰 영향력을 줘서 새로운 데이터의 라벨값을 예측했다.  




 Deep belief network (DBN)


DBN은 입력층과 은닉층으로 구성되어 있는 제한된 볼츠만 머신(restricted Boltzmann machine; RBM)을 블럭을 쌓듯이 층층이 쌓인 형태도 연결된 신경망이다[1]. DBN은 피드포워드 신경망의 한계를 극복하기 위해 만들어졌다. 피드포워드 신경망의 경우 층수가 많아지면서 경사 감소 소멸(gradient decent vanishing) 문제로 인해 제대로 훈련을 시키는 것이 어려웠다. 따라서 RBM을 비지도학습인 사전 학습(pre-training)을 통해 가중치를 어느 정도 정확해에 근접한 값으로 보정해 놓는다. 이때 RBM을 훈련시킬 때 사용되는 방법이 contrastive divergence (CD)이다. 그러고 나서 마지막에 튜닝 과정(fine-tuning)을 통해 정확해에 가장 가까운 최종 가중치를 계산하도록 했다. 



1) Shao F, Tian W, Lin W, et al. Toward a Blind Deep Quality Evaluator for Stereoscopic Images Based on Monocular and Binocular Interactions[J]. IEEE Trans Image Process, 2016, 25(5):2059-2074.


Shao 등은 단안(monocular) 상호작용과 양안(binocular) 상호작용을 고려하여 3D 이미지의 품질을 결정하는 방법을 제안했다. 단안 이미지들로 1개의 DBN을 훈련시켰고, cyclopean 이미지로 또 다른 DBN을 훈련시켰다. 그리고 좌, 우 단안 이미지들을 이미 훈련된 단안용 DBN에 입력시켜 두 개의 로컬 단안 품질 점수를 얻었고, 두 종류의 cylopean 이미지들을 이미 훈련된 양안용 DBN에 넣어주어 두 개의 로컬 양안 품질 점수를 얻었다. 이 4개의 로컬 품질 점수는 단안, 양안 상호작용을 고려하는 weighting 전략을 통해 하나의 최종점수로 통합되었다. 




 Stacked auto-encoders (SAE)


SAE는 큰 틀에 있어서 DBN과 비슷하다. SAE에서는 RBM 대신에 auto-encoder들이 층층이 쌓여진다. 역시 사전 학습과 튜닝을 통해 훈련된다. auto-encoder는 입력층의 노드의 갯수보다 은닉층의 노드의 갯수를 적게 설정한다. 입력값은 인코더를 통해 은닉값으로 인코딩되고, 이 은닉값은 다시 디코더를 통해 디코딩된다. 이때 auto-encoder는 디코더를 통해 디코딩된 값이 입력값과 최대한 같아지는 방향으로 훈련시킨다. 은닉층의 노드의 갯수가 입력층보다 더 적기 때문에 은닉값은 입력값의 차원을 축소시킴과 동시에 더 추상적인 값을 보유하게 된다. 이런 방식으로 한 층이 훈련되면 은닉층을 거쳐 나온 출력값을 두번째 auto-encoder의 입력으로 삼아 두번째 auto-encoder를 훈련시킨다. 사용자가 원하는 수의 층을 가질 때까지 이 과정을 반복한 후에 fine-tuning으로 최종적으로 전체 네트워크의 가중치를 조정해준다. 



1) J. Yang, K. Sim, X. Gao, W. Lu, Q. Meng and B. Li, "A Blind Stereoscopic Image Quality Evaluator with Segmented Stacked Autoencoders Considering The Whole Visual Perception Route," in IEEE Transactions on Image Processing.


이 논문은 최근에 Accept된 내가 주저자로 참여한 논문이다. 사람이 3D 이미지를 눈으로 보고 뇌로 처리해서 최종적으로 품질 점수를 매기는 신경생물학적 시스템을 모델링했다. 우리가 두 눈으로 본 이미지는 망막신경절(retinal ganglion cell)을 거치게 되는데 그곳에서 엣지 정보가 추출된다. 그렇게 동작하는 이유는 이미지 내의 많은 정보중에서도 엣지가 가장 핵심적인 정보이기 때문이다. 또한 그곳을 지나 lateral geniculate nucleus에서는 색과 관련된 정보가 처리된다. 이후에 V1에 도달해서는 좌, 우 정보가 융합되기 시작하고, 이미지를 구성하고 있는 점, 선과 같은 기초적인 특성들이 도출된다. 그리고 V2, V3, MT 등 여러 기관을 지나 전두엽에 도달할 때까지 그 기초적인 특성은 점차 더 의미있는 추상적인 특성으로 변화된다. 이 변화과정을 나는 SAE로 모델링했다. 최종적으로 전두엽에 도달한 추상화된 특성들은 품질 평가를 내리는 자료로 활용되고, 나는 이것을 SVR로 모델링했다.  




▶ convolutional neural network (CNN)


CNN은 이미지에 내포되어 있는 여러 특성을 추출하기 위해, 그 특성들을 대표하는 필터 커널을 사용해서 컨볼루션을 취한다. 예를 들어, 수직 엣지 필터 커널을 사용하면 이미지의 수직 엣지 성분이 강조되고, 블러 필터 커널을 사용하면 이미지에서 같은 톤으로 이뤄진 배경과 같이 변화가 적은 부분이 추출된다. 이러한 필터 커널들을 사용해서 생성한 이미지들을 특성지도(feature map)라고 부른다. 필터 커널을 이용해 컨볼루션이 완료된 데이터는 ReLU와 같은 활성화 함수에 통과시켜 좀 더 판별력 있게 만든다. 


필터링 과정을 통해 입력 데이터 이미지의 특성은 추출했지만, 여러 개의 특성지도가 생성되면서 처리해야할 데이터 양은 그만큼 더 많아졌다. 이 문제를 해결하기 위해서 풀링(Pooling) 또는 서브샘플링(sub-sampling)이라는 과정이 적용된다. 풀링 커널을 이용해서 n x n 크기 내에 있는 데이터에서 대푯값을 취한다. 풀링 커널의 종류에는 최대 풀링, 평균 풀링, 확률적 풀링 등이 있다. 풀링 커널의 사이즈가 3 x 3이고 최대 풀링이라면, 특성지도에서 9개의 인접 데이터 중에서 가장 큰 하나만 선택하고 나머지는 버린다. 그만큼 데이터의 양이 줄어든다. 


필터링 -> 활성화 -> 풀링 과정을 거치면 픽셀 단위의 이미지에서 에지나 실루엣 들의 특성으로 이뤄진 특성지도가 완성된다. 그 다음에는 이러한 부분적인 특성을 모아 좀더 확대된 형체의 이미지를 구성한다. 이를 위해 이웃한 특성지도들을 여러 개 조합해서 새로운 입력 데이터를 만든다. 이제 또 다시 필터링 -> 활성화 -> 풀링의 과정을 반복한다. 이 과정을 몇번 반복할지는 사용자가 과제에 따라 결정할 수 있다. 

 

충분히 특성이 추출 및 압축되었을 때 입력 데이터가 어느 그룹에 속하는지 판별하는 분류 과정을 진행한다. 이를 위해 추가적으로 다층 신경망이 연결되고 피드포워드 및 역전파를 통해 학습이 진행된다. 



1) Zhang W, Qu C, Ma L, et al. Learning structure of stereoscopic image for no-reference quality assessment with convolutional neural network[J]. Pattern Recognition, 2016, 59(C):176-187.


Zhang 등은 스테레오 이미지로부터 얻은 이미지 패치들을 CNN에 입력해주어 자동적으로 특성을 도출한 다음에 그것을 이용해서 이미지 품질 점수를 산출했다. 이 알고리즘은 다른 방법들과 달리 사용자가 어떤 특성을 도출할지 고려할 필요가 없고, CNN이 알아서 이미지로부터 특성을 도출해준다는 특징이 있다. 




▶ 정리


이 글은 이러저러한 머신러닝, 딥러닝 알고리즘에 대한 간략한 소개와 몇몇 대표적인 알고리즘들이 IQA라는 분야에서 어떤 방식으로 사용되고 있는지 개괄적인 소개를 위한 것입니다. 쓰다보니 관련 연구자가 아니면 너무 어려운 용어와 개념이 많은 것 같네요. 좀 더 쉽게 이해할 수 있도록 차차 수정하겠습니다. 궁금증이 있다면 댓글을 남겨주세요.^^ 



<참고문헌>

[1] 김의중 지음, "알고리즘으로 배우는 인공지능, 머신러닝, 딥러닝 입문", 위키북스

[2] https://en.wikipedia.org/wiki/Visual_Information_Fidelity => VIF

[3] https://en.wikipedia.org/wiki/Structural_similarity#Application => SSIM

[4] Wang Z. Applications of Objective Image Quality Assessment Methods [Applications Corner][J]. Signal Processing Magazine IEEE, 2011, 28(6):137-142. => IQA 알고리즘의 응용 분야. 

+ Recent posts

티스토리 툴바