PBL Report (자기평가서, QnA 활동 상황 포함)
Fall (2019)
Final. PBL Report (개인성찰 노트)
Action Learning
Your Class: Basic Math for AI
Prof : Sang-Gu LEE
과제함 Due day : 12월 11일 (수정본: 12월 20일)
Name (이름) : 엄**, 최&&, 박@@
Major and Student No (전공 및 학번) : 자연과학**, **공학
[Team **] Team Leader : 김** Team member : 유**, 엄**, 박&&
e-mail and phone (이-메일 및 전화번호): o**@naver.com w**@naver
Sample: Calculus 1 http://matrix.skku.ac.kr/PBL/ (미적분학 1)
Calculus 2 http://matrix.skku.ac.kr/PBL2/ (미적분학 2)
http://matrix.skku.ac.kr/2019-Album/DM-PBL/ (이산수학)
http://matrix.skku.ac.kr/2018-album/LA-PBL.htm (선형대수학)
http://matrix.skku.ac.kr/2019-Album/MH-PBL/ (수학사)
Ch 1장. Self Evaluation 1. (개인 성찰 노트)
과 목 명 |
인공지능을 위한 기초수학 |
||||||
이 름 |
엄@@ |
학 과 |
자연과학계열 |
||||
학습한 내용 |
선형대수학 |
||||||
자기 점검표 |
|||||||
활동(Activity) |
Excellent |
Good |
Fair |
||||
1. |
나는 개인학습을 할 때 다양한 학습 자료를 사용하였다. |
|
o |
|
|||
2. |
나는 새로운 정보와 지식제공에 기여하였다. |
|
O |
|
|||
3.
|
나는 토의에 적극적으로 참여하였고 토의의 촉진과 이해를 위한 적절한 질문을 많이 제공하였다. |
|
O |
|
|||
4. |
나는 우리 반이 원활한 학습활동을 하는데 기여하였다. |
|
O |
|
※ 다음 항목들을 고려하여 자신의 학습과정과 내용을 기록하시오.
1. 나는 지금 수행되고 있는 학습의 진행내용을 이해하고 있는가?
선형대수학은 1학기에 학습을 하였고 궁금한 점이 생기면 물어보며 해결하여 고유값과 고유벡터, 이차 형식, SVD등의 내용들을 무리 없이 이해하며 학습하였다. 그리고 다변수 미적분에 대한 내용은 처음 보는 내용이 있어 공부를 하였고, 상당 부분 이해하였다. 미적분학 부분 중 Taylor 정리가 그나마 난관이었지만 이제는 잘 극복해낸 것 같습니다. 통계학에 대한 내용은 아직 미숙한 부분이 상당히 있어 공부를 하며 따라가야 하는 상황이다. 마지막 부분인 인공지능에 대한 내용은 Team2에서 인공지능에 대한 실습 환경을 제공하는 활동을 하며, 주성분분석, FC layer, CNN 등에 대해 알아보며 꽤 알게 되었다. 이렇게 part1에서 part4를 거치며 학습하고, 팀 프로젝트를 통해서 효율적인 학습을 할 수 있었다. 인공지능과 수학에 대한 내용뿐만 아니라 인공지능에 대한 수학의 적용 또한 알 수 있었다. 확률에 대해서는 정말 많은 부분을 새로 배웠다. 그래도 교재에서 제공하는 코드를 활용해 많은 예제들을 숫자를 바꿔서 풀어보고, 시각적으로 표현되는 자료들을 접함으로써 쉽게 이해할 수 있었다. 주성분 분석 등 Part 4. 빅 데이터와 인공지능과 관련된 기법들도 잘 설명할 수 있게 되었다.
2. 어떤 방법을 통해서 학습하였는가? (학습방법 및 자료)
이상구 교수님이 올려주신 자료를 보며 주 내용을 학습하였고, 그러다가 더 자세히 알고 싶은 부분은 선형대수학에 대한 내용은 1학기 때 사용하였던 선형대수학 교재를 보기도 했고, 미적분학에 관한 내용은 미적분학 교재를 보기도 하였다. 또한, 인터넷을 통해 궁금하거나 더 알아보고 싶은 부분은 검색을 통해 찾아보았다. 어려운 내용은 구글 검색을 통해 더 자세한 정의를 보거나 예제들을 풀어본다. Q&A게시판에서의 질문, 답변으로 이해도를 높이기도 한다. 포털 사이트에서 강의와 관련된 내용의 기사들을 읽고 그것을 문의 게시판에 공유하기도 한다. 그리고 문의 게시판에 모르는 내용을 질문도 해보며 궁금증을 해결하였다. 특히 인터넷을 통해서 자료를 찾는 것을 하다 보니 전보다 원하는 자료를 더 잘 찾을 수 있게 되어 학습에 있어 궁금한 내용을 상당부분 해결할 수 있게 되었다.
3. 본 강좌의 학습활동을 통하여 무엇을 배웠나?
선형대수학, 미분적분학, 확률 그리고 빅 데이터와 인공지능에 대한 내용들을 수업시간에 일차적으로 배웠고, 과제를 통해 다른 사람들과 제 생각을 비교해보거나 수업 내용을 예습, 복습하는 자기주도적인 학습법도 배울 수 있었다. 중간고사 이후로는 팀 프로젝트를 진행하면서 팀원과 협력하여 문제를 해결하는 능력을 키웠다. 특히 팀원으로 의견 조율이나 역할 분배를 하는 방법도 배웠다.
지금까지의 강좌를 통해 선형대수학의 내용을 배웠다. 벡터와 같은 내용에서부터 역행렬, 역행렬을 구하는 방법, determinant구하는 것, vector space와 subspace, null space, column space, rank, normal equation, 선형변환 ,고유값, 고유 벡터, 행렬의 대각화, LU분해, QR분해, SVD, pseudo inverse 등의 내용을 배웠다. 특히 normal eqution을 통해 사장, 노동자, 소비자의 요구를 최대한 조율하면 된다는 내용과 SVD혹은 null space과 같은 방법으로 행렬의 크기를 줄여서 적은 시간을 투자해도 되게끔 실생활에 적용된다는 것이 인상적이었다. 뿐만 아니라 점 n개를 지나는 (n-1)차 다항식은 항상 존재하며 이를 통해서 앞으로의 변화 추이를 예측하는데 사용할 수 있다고 배웠다. 여기서 모든 연속함수는 근사한 다항식이 존재하며, 이 때 구간을 작게 잡으면 3차 이상은 영향을 적게 미치므로 quadratic form에서 배운 것처럼 2차형식으로 나타낼 수 있고, 이 때
에서 A의 eigenvalue 등을 함수의 개형을 파악한다고도 배웠다. 이 또한, gradiant=0인 점이 critical point이고, 헤시안 행렬의 고윳값을 통해서 극대 극소를 판단할 수 있다는 사실도 배웠다. 통계학에서는 순열, 조합, 확률, 조건부 확률에 대해서 배웠다. 그리고 확률 분포에서 이산확률분포에서 베르누이 분포, 이항분포, 푸아송분포에 대해 배웠고, 연속확률분포에서 균등분포, 정규분포, 지수분포에 대해 배웠다. 그리고 가장 중요한 n이 커질수록 모집단의 분포 유형에 상관없이 근사적으로 정규분포를 따르게 된다는 중심극한정리를 배웠다. 이 때 표준 코시 분포는 n이 커져도 정규분포를 따르지 않는다는 것도 알게 되었다. 또, 확률 분포에 확률 변수가 두 개 이상 있는 결합 확률 분포와 공분산, 상관계수, 공분산행렬을 배웠다. 미적분학이 인공지능에 어떻게 쓰이는지를 배웠다. PCA를 배웠다. 기본적인 인공지능 모델들을 배웠다. 마지막으로 인공신경망은 입력층, 은닉층, 출력층의 구조를 가진다는 것에 대해서 배웠고, 또한, 가중치를 조정하는 오차 역전파법에서 경사하강법이 사용된다는 것을 배웠다.
4. 다른 동료들로부터 무엇을 배웠는가?
이런 형태의 강의가 처음이라 많이 낯설었는데, 다른 분들이 Q&A게시판에서 활동하는 것을 보면서 ‘이렇게 글을 쓰면 되는구나.’하는 것을 많이 배웠다. 토론방이 활성화 된 줄도 모르고 참여하지 못했는데 많은 사람들이 토론에 참여한 것을 보고 상당히 적극적으로 참여하고 있다는 것을 깨달았다. 또한, 타인에 질문에 답변을 해주는 모습을 보고, 그들처럼 적극적으로 참여해야겠다고 느끼게 되었다. 그리고 답변을 해주는 것을 보고 많은 지식을 가지고 있음을 느꼈고, 지식의 격차를 줄이기 위해 좀 더 분발해야겠다고 느꼈다. 또한, 김** 팀장님이 개념 설명에 대한 comment를 올려줄 때 인공지능에 대해 상당히 많이 알고 있다는 것을 알게 되었다. 이를 통해서 공부에 힘을 써서 지식을 쌓음으로써 국가 혹은 세계가 필요로 하는 인재가 되도록 노력해야겠다고 느끼게 되었다. 마지막으로 QnA에 꾸준히 글을 올리면서 최선을 다하는 분들의 모습을 보고, 주어진 바에 최선을 다하는 태도를 배울 수 있었다. 이외에도 저와 다른 독특한 생각을 가진 분들의 질문, 본인만의 문제 해결 방법 등을 보며 제 사고방식도 조금은 넓어진 것 같다.
5. 새롭게 배운 내용을 실제 생활에 어떻게 적용할 것인가?
실생활에서 얻은 데이터를 행렬로 만들어서 null space, column space, LU분해, 행렬의 대각화, QR분해, SVD같은 방법을 이용해 데이터의 차원을 최대한 줄여서 시간을 줄이는데 사용하면 될 것 같다. 그리고 답을 찾을 때 답이 딱 떨어지는 경우가 별로 없으므로 normal equation을 통해 해를 찾으면 될 것 같다. 그리고 실생활에서 데이터를 얻었을 때 선형 회귀법을 사용하거나 혹은 그러한 점들에 가까운 다항식을 얻음으로써 데이터의 경향을 파악할 수 있다. 그리고 인공 신경망의 학습에 경사하강법을 사용할 수 있다. 인공 신경망에게 데이터를 주고, 이 데이터를 분석하는 과정에서 임의로 가중치를 부여하게 되는데, 그 때의 결과와 원하는 정답과의 오차를 계산한다. 그 후 오차 역전파법을 이용하여 오차를 줄여나갈 때 경사하강법을 이용하여 정답과의 오차가 오차 범위 내에 들어오도록 인공 신경망을 학습시킬 수 있다. 차원 축소의 한가지 종류인 주성분 분석(PCA)을 사용함으로써 고차원 데이터을 분석할 때 데이터의 성질을 최대한 잘 나타내는 직교축을 잡음으로써 저차원 데이터로 변환해 데이터를 더 쉽게 다룰 수 있다.
선형대수학을 이용해 실제 생활에서 간단하게 해석할 수 있는 운동들(등속직선 운동, 자유낙하 운동 등)을 모델링하고, 모델링한 운동들을 sage를 활용해 여러 수치들을 대입하며 비교해보면 재미있을 것 같다. 이 수업을 통해 배운 내용은 수학적 지식만 있는 게 아니라 모르는 내용을 적극적으로 질문하고, 더 알고 싶은 내용을 스스로 찾아보는 공부법을 다른 과목들에도 적용시켜 단순히 시험 점수를 높이는 것이 아니라 과목에 대한 이해도를 높이고 싶다. 새로 배운 확률, 통계에 대한 공식들로 주변에서 얻을 수 있는 데이터들을 plot해보고 그 의미를 해석하는 일도 해보고 싶다.
6. QnA 활동에서 자신의 역할과 기여도에 대한 평가(자신의 활동에 점수를 주고 그 이유를 적으세요.) :
- 80 점.
- Hw2를 해서 올린 것과 SVD에 대해 질문을 한 것, 통계학에서 사후확률에 대해 질문하였고, comment를 남긴 활동을 하였다. 또한, Team2에서 Exam1에서 문제를 푸는 것과 final project에서 다룰 내용에 대한 개념 설명을 하는 글을 올렸다. 시즌이 되면, 몰아서 한 경향이 있었다. 분발할 필요가 있지만, 그래도 노력했다는 점에서 75점을 주었다. 요즈음 팀 프로젝트에서 Exam1을 할 때 열심히 참여한 부분을 생각하여 5점을 더해서 이런 점수를 주게 되었다. 쌍방향으로 의사소통하며 분반의 모든 학생들의 수학적 지식을 넓히는 것이 현재 이 수업의 취지라고 생각한다. 9월에 비해 다양한 주제(수업을 통해 배운 내용, 궁금한 점, 수학 관련 시사 문제 등)에 대해서 Q&A게시판에 글을 쓰고, 다른 분들의 글에 댓글로 제 의견이나 추가 질문을 적었다. 특히 꾸준히 글을 쓰고 있다는 점은 저에게 좋은 점수를 줄 수 있는 이유라고 생각한다. 중간고사 이후로 진행한 팀 프로젝트의 내용들을 공유한 점도 잘했다고 느낀다.
7. 다른 학생에 대한 평가
최** 님은 다른 Team이지만, Exam1에 대한 문제를 풀 때 comment를 달아주는 활동도 하는 것을 보고, 매우 열심히 활동한다고 생각하였다. Team3의 조장으로 상당히 열심히 적극적으로 수업에 참여하는 것 같았다.
그리고 Team2의 조장인 김** 님 또한, 매우 열심히 한다고 생각하였다. 코딩에 뛰어난 재능이 있어 보인다. 인공지능 실습 환경을 만들 때 개념 설명을 하는 내용에 대한 글을 올렸을 때 틀린 부분은 올바른 이해를 할 수 있도록 지적해주는 comment를 남겨주었다. 이를 통해서 나도 인공지능 혹은 다른 분야에 대해 깊이 알아서 다른 사람에게 지식을 알려주는 활동에 참여해야겠다고 느끼게 해주었다.
황** 님도 그동안 R언어 복습, 면담 내용 정리와 같이 매우 꾸준히 QnA에 글을 올리며 열심히 참여하는 모습을 보여줬다. 이러한 꾸준함이 인상 깊었고, 나 또한 꾸준함을 갖추기 위해 노력해야겠다고 느끼게 해주었다.
다른 사람들의 의견을 정리하고, 거기에 자신의 생각을 다시 comment하는 솜씨가 대단하다. 또 R언어에 관한 글을 최근에 자주 써주었는데 복습에 큰 도움이 되었다. 최**님께서 3D그래프를 사용해 예제를 푸는 방법에 대해 글을 올리신 것을 봤다. 잘 알려지지 않은 프로그램까지 활용해 공부하는 모습에서 수학에 대한 열정이 느껴졌다. 송**님의 아이캠퍼스 관련 건의사항도 신선한 충격이었습니다. 유튜브 같은 사이트는 거의 모든 사람들이 알고 있는 곳인데, 그것의 장점을 아이캠퍼스에 이식하면 어떻냐는 의견이 정말 참신하다고 생각했습니다.
Self Evaluation 2. (개인 성찰 노트 2)
과 목 명 |
인공지능을 위한 기초 수학 |
||||||||
이 름 |
엄@@ |
학 과 |
자연과학계열 |
||||||
평가항목 |
전혀 아니다 |
아니다 |
약간 아니다 |
약간 그렇다 |
그렇다 |
매우 그렇다 |
|||
1. |
온라인-오프라인 출석을 규칙적으로 하였다. |
|
|
|
|
O |
|
||
2. |
QnA에 적극적으로 참여하였다. |
|
|
|
|
O |
|
||
3. |
QnA 내용에 적합한 질문과 응답을 하였다. |
|
|
|
O |
|
|
||
4. |
동료에게 도움이 되는 지식과 정보를 제공하였다. |
|
|
O |
|
|
|
||
5. |
다른 동료의 의견을 존중하였다. |
|
|
|
|
O |
|
||
6. |
QnA 운영 및 의견수렴과정에 긍정적으로 기여하였다. |
|
|
|
O |
|
|
||
7. |
이번 강좌의 동료와 다른 수업도 듣고 싶다. |
|
|
|
|
O |
|
[의견] 인공지능을 위한 기초수학 이라는 과목이 올해 처음 생긴 강의로 알고 있습니다. 그런데도 수강신청을 하신 분들 중에는 인공지능에 대한 관심, 수학에 대한 지식이 많은 분들이 있다고 생각하고, 이번 학기에 더 친해져서 다음 학기부터는 그분들과 함께 인공지능과 관련된 다른 수업들도 들어보고 싶습니다.
▶ 자체평가에 따른 잘한 점
다른 분들의 질문에 댓글로 답을 작성할 때에는 작성자가 잘못 생각하고 있는 부분을 따옴표나 괄호를 사용해 주의 깊게 볼 수 있도록 하였습니다. 가끔은 인공지능에 관한 뉴스나 기사를 가져와 다른 분들과 의미 있는 정보를 공유하기도 합니다. HW2를 해서 올린 것과 이 분반에서 SVD에 대해 두 번 질문을 하고, 통계학의 사후확률에 대한 질문을 하였다. 또한, 이상구 교수님이 올린 글에 comment를 달고, Team2의 활동에 몰아서 하는 경향이 있었지만 적극적으로 참여하며 QnA를 활성화하는데 기여한 것 같아 그 점은 잘했다고 생각한다. 특히 Team2에서 Exam1을 할 때 문제도 열심히 풀고, 팀원이 올린 문제를 finalize하며 열심히 참여한 것은 잘했다고 생각한다.
▶ 자체평가에 따른 아쉬운 점
혼자 해결해보려고 하는 성향이 강해 QnA에서 질문을 하는 활동에 많이 참여하지 않은 것과 잘 모르기도 했지만 다른 사람에 대한 답변을 적극적으로 하지 않은 것이 아쉬웠다. 또한, 교수님이 올리는 글 특히 다른 사람이 올린 글에 comment를 다는 활동을 별로 하지 않은 것이 아쉬웠다. 이 점에 대해서는 좀 더 분발할 필요가 있다고 느낀다. 아무래도 아는 내용이 많지 않다보니 다른 사람들에게 나의 지식을 공유하지 못하는 점이 아쉽다고 생각한다. 지식의 부족함을 깨닫고, 더 탐구해야겠다고 느낀다.
Self Evaluation 3. (개인 성찰 노트 3)
자신의 학습에 도움이 된 우수한/성실한 동 료 평 가
과 목 명 |
인공지능을 위한 기초수학 |
|||||||
|
(두 명 이상의 추천을 받은 학생은 가산점) |
|||||||
피평가자(동료) |
김**, 최**, 황** |
|||||||
평가자(작성자) |
엄@@ |
|||||||
평가항목 |
전혀 아니다 |
아니다 |
약간 아니다 |
약간 그렇다 |
그렇다 |
매우 그렇다 |
||
1. |
온라인-오프라인 출석을 규칙적으로 하였다. |
|
|
|
|
O |
|
|
2. |
QnA에 적극적으로 참여하였다. |
|
|
|
|
|
O |
|
3. |
QnA 내용에 적합한 질문과 응답을 하였다. |
|
|
|
|
O |
|
|
4. |
동료에게 도움에 되는 지식과 정보를 제공하였다. |
|
|
|
|
O |
|
|
5. |
다른 동료의 의견을 존중하였다. |
|
|
|
|
O |
|
|
6.
|
QnA 운영 및 의견수렴과정에 긍정적으로 기여하였다. |
|
|
|
|
O |
|
|
7.
|
이번 강좌의 동료와 다른 수업도 듣고 싶다. |
|
|
|
|
O |
|
|
[의견]
▶ 자체평가 중 잘한 점 QnA에서 올린 글에 대한 comment를 달아주고, 자신이 아는 내용을 공유하는 등의 많은 활동을 하는 것을 실제로 확인 할 수 있는 동료를 골랐다는 점에서 신빙성이 있다고 생각한다. 또한, 실제 수업에도 모두 참석하는 모습도 열심히 활동을 하였다는 증거가 될 수 있다고 생각한다. 특히 꾸준히 QnA에 글을 올려서 추천한 사람들의 이름을 빈번히 문의게시판에서 확인할 수 있다는 것은 추천에 있어 반박의 여지가 없는 것 같다.
▶ 자체평가 중 미비점 QnA에서 올린 글에 대한 comment를 달아주어 올바른 개념을 확립할 수 있도록 도와주었지만, 이는 최근에 내가 올린 글에 대해 답변을 달아주었기에 그렇게 느끼는 것이다. 즉, 나에게 많은 답변이 이뤄지는 과정에서 추천을 해주었기에 다른 사람에게는 그리 공정하지 않은 평가일 수도 있다고 생각한다. 미비한 점을 찾자면 이렇게 할 수 있지만, 그래도 그동안 QnA활동이나 실제 수업 참석과 같은 꾸준한 점을 보면, 그렇게 미비하지는 않다고 생각한다. |
Self Evaluation 4. (개인 성찰 노트 4)
Action Learning Class 반응평가(학생용)
* 1~16 평가내용을 읽고 「매우긍정~매우부정」 중 하나에 V 표시하시오. 그리고 5, 12, 14번은 연결문항에 답하시오.
평가내용 |
평가 |
||||
매우 긍정 |
긍정 |
보통 |
부정 |
매우 부정 |
|
1. 우리 방식의 수업에 적극적으로 참여하였다. |
|
|
O |
|
|
2. 교수는 학생들의 능력을 발휘하도록 도와주었다. |
O |
|
|
|
|
3. 우리 방식의 학습 과정을 통해서 새로운 지식을 획득하였고 지식수준이 향상되었다. |
O |
|
|
|
|
4. 이 과정을 통하여 추론기술이 향상되었다. |
|
O |
|
|
|
5. 이 과정을 통하여 자기 주도적 학습기술을 습득하였다. |
|
O |
|
|
|
6. 이 과정을 통하여 문제해결기술을 습득하였다. |
|
O |
|
|
|
7. 이 과정을 통하여 학습운영기술을 습득하였다. |
|
O |
|
|
|
8. 이 과정을 통하여 전문성이 향상되었다. |
|
O |
|
|
|
9. 이 과정은 실제 연구 상황과 유사하였다. |
|
|
O |
|
|
10. 학습과정에 대한 평가 방법이 합리적이었다. |
|
O |
|
|
|
11. 문제해결을 하면서 학습주제를 더 잘 알게 되었다. |
|
|
|
|
|
12. 학습과정에서 학습주제와 관련한 활발한 의사소통이 이루어졌다. |
|
|
O |
|
|
13. 학습결과는 문제해결절차를 통해서 산출되었다. |
|
O |
|
|
|
14 전반적으로 우리 방식의 수업이 효과적이라고 생각한다. |
|
O |
|
|
|
15. 우리 방식의 수업에 다시 참여하고 싶다. |
|
O |
|
|
|
* 5, 12, 14 연결문항
5-1. 본 수업을 통해 자신이 습득한 자기 주도적 학습 기술을 구체적으로 설명하시오.
복습을 하며 QnA게시판에 글을 작성하고, 그에 대해 다른 사람들의 의견을 받고, 그걸 다시 정리하는 저희 강의의 수업 방식이 제가 스스로 학습하는 데에 많은 도움이 되었다고 생각합니다. 또 그동안 다른 과목을 할 때에 계산하기가 힘들어서 과제로 내주신 문제들만 풀었는데 이번 수업에서 적극적으로 활용하는 sage라는 프로그램 덕분에 교재 내의 많은 예제들을 직접 풀어볼 수 있게 의욕이 생겼습니다. 방대한 자료를 보며 상세한 내용을 인터넷이나 다른 책을 통해 찾아보는 기술을 배웠다. 적극적으로 질문하는 방식은 서서히 익혀가는 중이다. 질문은 많이 하지 않았지만, 질문을 하면 답변을 해준다는 것과 이와 같은 질문과 답변의 방식이 공부에 매우 효과적이라는 것을 느끼게 되었다. 질문과 더불어 인터넷에 궁금해 하는 내용을 다루는 자료는 상당이 많이 있음을 비로소 깨닫게 되었다. 인터넷 검색을 통한 자기 주도적인 학습의 필요성과 편리함을 느끼게 되어서 현재 많이 하고 있고 앞으로도 할 것이다.
12-1. 본 수업과정에서 자신이 참여한 활발한 의사소통을 구체적으로 설명하시오.
그동안 질문과 답변에 활동 대해서 3번 참여하였다. 처음에는 SVD에서 positive definite와 real eigenvalue에 대한 질문을 하였고, 2번째로는 의 관계에 대한 질문을 하였다. 이렇게 질문을 하니 여러 분들께서 답변을 해주었고, 그를 통해서 궁금증을 해소할 수 있었다. 그리고 통계학에 대해서는 사후확률에 대한 질문을 하였고, 어떤 시행이 독립시행이라 각 시행이 영향을 미치지 않을 지라도 사후 확률은 큰 수의 법칙에 근거한 확률이라는 것을 알게 되었다.9월 이후에는 다른 분들의 질문에 댓글로 답변을 작성하기도 했고 교수님께서 올려주신 수학 관련 시사문제에 대해 토론도 했습니다. 팀 프로젝트에서 조사한 내용을 올리거나 Exam1을 풀어서 올리고, finalize하며 팀원들과의 의사소통에 참여하였다.
14-1. 우리 방식의 수업에서 효과적이었다고 생각되는 부분을 구체적으로 설명하시오.
매주 글을 써야한다는 점이 처음에는 큰 부담으로 느껴졌습니다. 소심한 성격이라 ‘이런 것도 글을 써도 되는 건가? 다른 사람들도 다 아는 내용 아니야?’하는 생각이 들었기 때문입니다. 하지만 막상 글을 쓰고 나니 자신의 의견을 피력한다는 것이 별로 어렵지 않다는 점을 배울 수 있었습니다. 이렇게, 수업에 참여하는 학생 모두가 자신의 의견을 낼 수 있도록 하는 것이 수업에 대한 참여도, 이해도 증진에 큰 도움을 준다고 생각합니다. Finalize, Re-Finalize는 다른 분들의 의견들을 곱씹어보게 하여 제 지식이 확장되는데 큰 도움을 주었습니다. 팀 활동으로 여러 사람들의 의견을 조율하는 능력을 키우게 해준 팀 프로젝트도 좋았습니다. 이상구 교수님이 제공해 주는 자료의 양이 상당히 많았고 특히 교재가 학습에 도움을 주었다. 그리고 질문에 대해 매우 열려있고 질문을 하면 다른 동료들과 교수님이 대답을 해주는 것이 매우 인상적이었다. 참여만 한다면 자신의 실력을 늘리는 것에는 매우 효과적이라고 생각한다. 결론적으로 많은 양의 자료와 질문에 열린 분위기, 인터넷을 통한 자료 검색에 익숙해지게 하는 환경이 상당히 효과적이었다. 이 수업이 기존 수업과 가장 다른 점이 바로 Q&A와 PBL 보고서이다. 먼저 Q&A를 활성화해서 궁금한 점을 학우들과 교수님의 빠른 답변을 통해 해소한다. Q&A 게시판 내용들을 보면 우리가 배우고 있는 내용의 흐름도 이해할 수 있다. 다른 학우의 질문에 답변하기 위해 고민하는 시간, 질문-답변을 정리하며 Finalize하는 시간이 무엇을 배우고 있는지 이해하는 데 큰 도움이 된다. PBL 보고서를 작성하며 매월 활동을 정리하는 것을 통해서도 자동으로 복습이 된다. Q&A 활동뿐만 아니라 배운 개념, 활용 방안 등을 정리해 이 과정에서 배운 내용을 한 번 더 돌아볼 수 있다. 강의를 배우면서, Q&A 활동을 하면서, PBL 보고서를 작성하며 내용을 세 번 학습해 완전히 자기 것으로 만드는 것이다.
20. 이 수업에서 보완해야 할 점은 무엇이라고 생각합니까?
공지사항이 상당히 많다보니 그동안 한 번만 보고 다시 확인을 하지 않은 경우 놓치게 되는 내용이 있었다. 물론 수시로 체크하면 될 수도 있지만, 공지할 때 여러 내용이 한 번에 있다면 더 좋지 않을까하는 생각을 해 봅니다.
그리고 아직까지 문의게시판에서 댓글로 입력을 한 경우는 검색이 되지 않고, 제목에 이름이 있어야만 검색이 된다는 것도 약간 불편하다고 느낄 수 있을 것 같습니다. 매주 교수님이나 조교님이 생각하시는 모범적인 Finalize 글을 선정하여 다른 학생들이 더 나은 퀄리티의 Finalize 글을 작성할 수 있도록 도와주시면 좋겠습니다.
문의 게시판에 글을 쓰다가 잘못 클릭이 될 경우 그동안 썼던 내용이 모두 날라 가게 됩니다. 수시로 글을 쓰면서 내용을 저장해도 되지만, 사이트에서 작성 하던 내용이 저장될 수 있으면 좋겠습니다. 가능한지는 모르겠지만, 이렇게 되면 좋을 것 같다는 생각을 합니다.
Participation [참여 평가 1] PBL report Due day : Dec. 2019
담당교수 또는 다른 학생들이 QnA에 업로드한 10개 이상의 자신의 Comment or Answer 를 주시오.
(1) State more than 10 Math Definitions and concepts what you learned in Ch. 1,,.,4.
0. 고윳값(eigenvalue)과 고유벡터(eigenvector):
n차행렬 A과, 0아닌 벡터 x가 적당한 스칼라 λ에 대하여 Ax = λx을 만족하면 λ를 A의 고윳값(eigenvalue)이라고 하고, x를 λ에 대응하는 A의 고유벡터(eigenvector)라고 한다.
1. QR분해 : 행렬 A가 rank k인 m×k행렬이라면, A=QR 로 분해가능하다. 여기서 Q는 A의 열공간 Col(A)의 정규직교기저로 만들어진 m×k행렬이고, R은 가역인 크기 k×k의 상삼각행렬이다
2. 행렬의 고윳값과 고유벡터 :A가 n차의 정사각행렬일 때, 을 만족하는 스칼라
를 A의 고윳값(eigenvalue)이라 하고,
을 만족하는 0아닌 벡터 x∈
를 고윳값
에 대응하는 A의 고유벡터(eigenvector)라고 한다
3. 행렬의 대각화 :A가 어떤 대각선행렬과 닮음행렬일 때, 즉 적당한 가역행렬 P가 존재하여 가 대각선행렬일 때 A를 대각화 가능한(diagonalizable) 행렬이라 하며, 이때 행렬 P를 A를 대각화하는(diagonalizing) 행렬이라고 한다.
4. SVD(특이값분해): 모든 행렬 A는 로 분해될 수 있다는 이론을 행렬의 특이값분해(SVD, singular value decomposition) 또는 간단히 행렬 A의 SVD라 부른다.
고윳값분해는 대각화 가능한 정사각행렬인 경우에만 정의되므로 일반적 행렬에 대한 행렬분해가 필요.
로 표현
5. 주축정리(principal axis theorem)는 이차 형식을 기술하는 문제에서, 어떤 이차 형식이든 적절한 변수 변환을 통해 혼합항이 없는 행렬 형태로 표현할 수 있음을 보장하는 정리
1. 행렬식(Determinant)
행렬식이란 행렬 가 정사각행렬일 때,
에 수를 대응시키는 함수 중 하나이다. 행렬의 가역성을 판단하는 데에 사용된다.
2. 생성(Span)
집합 에 있는 벡터들의 일차결합 전체의 집합을
라 하면,
가
를 생성한다고 말한다.
3. 기저(Basis)
집합 S가 일차독립이고 S가 Rn을 생성하면 S를 Rn의 기저라고 한다.
4. 차원(Dimension)
집합 S가 Rn의 한 기저일 때, S에 속하는 벡터의 수를 Rn의 차원이라고 한다.
5. 최소제곱해(Linear least squares)
최소제곱해란 방정식의 개수보다 미지수의 개수가 많은 선형연립방정식 Ax = b에 대하여 Ax ≈ b를 만족하는 근사해 x중 오차가 최소인 것을 의미한다.
6. 정규방정식(Normal equation)
ATAx = ATb를 정규방정식이라고 말한다. 이것의 해 x는 Ax = b의 최소제곱해이다.
7. QR 분해(QR-decompositon)
행렬 A가 rank A = k인 m × k 행렬이면, A = QR로 분해가능하고, 이렇게 분해하는 것을 QR분해라고 부른다.
8. 직교대각화(Orthogonally diagonalizing)
정사각행렬 A에 대해 A를 대각화하는 직교행렬 P가 존재하면 A = PDPT로 쓸 수 있고, 이것을 직교대각화라고 한다. 직교대각화가 가능하려면 A는 대칭행렬이어야 한다.
9. 선형변환 (Linear transformations)
변환 T : Rn → Rm가 Rn에 속하는 임의의 벡터 u, v와 임의의 스칼라 k에 대해 T(u+v) = T(u) + T(v)와 T(ku) = kT(u)를 만족하면 T를 선형변환이라고 한다.
10. 고윳값(eigenvalue), 고유벡터(eigenvector)
정사각행렬 A에 대해 Ax = λx를 만족하는 λ를 A의 고윳값, x를 λ에 대응하는 A의 고유벡터라고 한다. 단, x는 0이 아닌 벡터이다.
7. 정규방정식(normal equation):
가 최소제곱문제 min∥Ax-b∥의 해가 될 필요충분조건은
을 만족하는 것이다.
[이때 선형연립방정식 을 정규방정식(normal equation)이라 한다.]
8. 최소제곱해(least squares solution):
b의 Col(A) 위로의 정사영을 이라 하면,
의 해가 존재한다. 이 해를
이라 하면,
이 바로 최소제곱문제 min∥Ax-b∥의 최소제곱해(least squares solution)가 된다.
A의 열벡터들이 일차독립(이를 A가 full column rank를 갖는다고 한다)이면, 가 가역이고, A의
열벡터들이 Col(A)의 기저가 된다. 따라서 최소제곱문제의 최소제곱해(least squares solution)는
이고,
를 만족한다.
9. 직교집합(orthogonal set), 정규직교집합(orthonormal set), 직교기저(orthogonal basis) 및 정규직교기저(orthonormal basis):
의 벡터
에 대하여
라 하자. 이때, S의 서로 다른 임의의 두 벡터가 모두 직교하면 S를 직교집합(orthogonal set)이라 한다. 특히, 직교집합 S에 속하는 벡터가 모두 크기가 1인 경우 S를 정규직교집합(orthonormal set)이라고 한다.
의 기저 S가 직교집합이면 직교기저(orthogonal basis), 정규직교집합이면 정규직교기저(orthonormal basis)라고 한다.
[Gram-Schmidt 정규직교화 기저의 존재성]
집합 을
의 임의의 기저라 하자. 그러면 S로부터 얻어지는 정규직교기저
가 존재한다.
[Gram-Schmidt 정규직교화 과정]
먼저 의 기저 S로부터 직교집합
을 다음과 같은 단계로 계산한다.
[단계 1] 이라 한다.
[단계 2] 에 의하여 생성되는 부분공간을
이라 하고
로 한다.
[단계 3] 에 의하여 생성되는 부분공간을
라 하고
로 한다.
[단계 4] 에서부터 n까지는 마찬가지 방법으로
위의 단계로부터 얻어지는 은 서로 직교인 직교집합이고, 각각의 크기를 1로 하면, 즉
라 정의하면 집합
은
의 정규직교기저이다.
11. 고윳값 분해(eigen-decomposition)
A가 A = PDPT로 직교대각화 가능하면 A = λ1u1u1T+λ2u2u2T+...+λnununT로 분해할 수 있는데 이를 A의 고윳값 분해라고 한다. 여기서 λ들은 A의 고윳값들이고 u들은 그에 대응하는 고유벡터들이다.
12. 특이값 분해(Singular Value Decomposition, SVD)
m × n 행렬 A에 대하여 A = UΣVT로 분해하는 것을 A의 특이값 분해라고 부른다. 여기서 V와 U는 각각 대칭행렬 ATA와 AAT를 직교대각화하는 행렬이고 Σ = UTAV이다.
13. 이차형식(Quadratic form)
n차의 대칭행렬 A와 n개의 변수를 성분으로 갖는 벡터 x에 대하여 xTAx를 Rn상의 이차형식이라 한다.
5. 일반화된 역행렬 (pseudo-inverse):
행렬 A가 크기 m×n 인 경우 크기 n×m 인 행렬 를 행렬 A의 일반화된 역행렬 (pseudo-inverse)라 한다. 여기서 U, V는 직교행렬이고,
은 다음과 같은 행렬이다.
이는 최소제곱해 연구에 중요하다.
6. Taylor 정리 : 함수 f가 연속인 편도함수를 가지면, 적당한 가 존재하여 다음이 성립한다.
만일 연속인 2계 편도함수를 가지면, 적당한 가 존재하여 다음이 성립한다.
7. 경사하강법 : 어떤 모델에 대한 비용(Cost)를 최소화 시키는 알고리즘으로써, 머신 러닝 및 딥 러닝 모델에서 사용되는 가중치의 최적 해를 구할 때 널리 쓰이는 알고리즘이다. 다음과 같은 단계로 진행된다.
1) 초기 근사해 과 허용오차
을 준다. k:=1이라고 한다.
2) 를 계산한다. 만일
이면, 알고리즘을 멈춘다.
3) 다음을 만족하는 을 구한다.
4), k:k+1라 두고 (2)로 이동한다.
8.뉴턴 방법(Newton’s method) : 경사하강법과 비슷한 방식이다. x_k 근방에서 이차함수를 이용해 근사화 할 수 있음을 이용해 탐색 방향을 로 택하는 경우를 맘ㄹ한다.
16. 헤시안: f의 2계 편도함수를 성분으로 갖는 행렬
10. 중심극한정리(central limit theorem, CLT) : 동일한 확률분포를 가진 독립 확률변수 n개의 평균의 분포는 n이 적당히 크다면 정규분포에 가까워진다는 이론이다. n이 증가할수록 모집단의 분포유형에 상관없이 많은 경우는 근사적으로 정규분포 를 따른다는 것이다. 하지만 표준 코시 분포는 n이 커져도 정규분포 따르지 않는 예외적인 경우이다.
11. 주성분 분석(Principal Component Analysis) : 차원 축소 기법 중 하나로 원 데이터의 분포를 최대한 보존하면서 서로 직교하는 새 기저를 찾아 고차원 공간 데이터들을 저차원 공간으로 변환하는 방법이다.
12. 오차 역전파법(Back propagation) : 정답을 통하여 학습할 때 임의로 부여된 가중치를 통해 얻은 예측값과 정답간의 오차를 줄이는 방향으로 가중치를 갱신해 나가는 방법이다.
14. 편도함수(Partial Derivative)
다변수함수에서 나머지 변수들을 고정시키고 하나의 변수에 대해서만 함수의 변화율을 구한 것을 편도함수라고 부른다.
17. 극대, 극소, 최대, 최소
(a, b) 주변의 모든 (x, y)에 대하여 f(a, b) ≥ f(x, y)가 성립하면 f(a, b)를 극댓값, f(a, b) ≤ f(x, y)가 성립하면 f(a, b)를 극솟값이라고 한다. f의 정의역의 모든 (x, y)에 대해서 위 식들이 성립할 경우에는 f(a, b)를 각각 최댓값과 최솟값이라고 한다.
18. 안장점
임계점이지만 극대도 극소도 아닌 점을 안장점이라 부른다.
20. 뉴턴 방법
함수 f를 근사하여 탐색 방향을 한 점의 음의 헤시안의 역과 그래디언트의 곱의 방향으로 지정한다.
21. 다중적분
이중적분은 구분구적법을 두 축에 적용하는 방법으로, 긴 직육면체 나무 막대들의 부피를 구해 더하는 방식으로 이해하면 편하다. 같은 방식으로 삼중적분, 사중적분 등도 정의할 수 있다.
22. 중위수, 사분위 수
n개의 표본자료를 크기순으로 나열했을 때 2등분하는 위치의 수를 중위수, 4등분하는 위치의 수들을 사분위 수라고 부른다.
23. 조건부 확률
어떤 사건 A가 일어났다는 조건하에서 사건 B가 일어날 확률을 사건 A에 대한 사건 B의 조건부 확률이라 한다.
24. 확률변수
일정한 확률을 갖고 발생하는 사건에 수치가 부여되는 함수를 확률변수라 한다.
25. 포아송 분포
이항 분포에서 평균은 일정하고 n을 한없이 크게 하면 포아송 분포가 된다. 포아송 분포는 단위 시간 안에 어떤 사건이 발생하는 횟수를 확률변수 X로 나타내는 확률 분포이다.
26. 표준화 확률변수
확률변수 X에 대하여 Z = {X-(X의 평균)}/(X의 표준편차)인 새 확률변수 Z를 정의하면 평균과 분산이 항상 1이다. 이 Z를 X의 표준화 확률변수라고 부른다.
19. 정규분포(Normal distribution):
확률변수 의 확률밀도함수가 다음과 같을 때, 는 정규분포(normal distribution)를 따른다 고 하고으로 표시한다.
27. 표준정규분포
이와 같은 확률밀도함수를 갖는 확률변수 Z는 표준정규분포를 따른다고 한다.
표준정규분포에서 평균은 0, 분산은 1이다.
28. 지수분포
사건이 서로 독립적일 때, 단위 시간동안 발생하는 사건의 횟수가 푸아송 분포를 따른다면, 다음 사건이 일어날 때까지 대기 시간은 지수분포를 따른다고 한다.
29. QQ plot
이론상의 Quantile vs. 획득한 샘플값의 Quantile을 분석한 plot. 분석할 표본 데이터의 분포와 정규분포의 분포 형태를 비교하여 표본 데이터가 정규분포를 따르는지 검사하는 간단한 시각적 도구이다.
30. 공분산과 상관계수
확률변수가 2개일 때 각 확률변수들이 어떻게 퍼져있는지 보여주는 개념을 공분산이라고 한다. 상관계수는 각 확률변수의 단위의 크기에 영향을 받는다는 공분산의 문제점을 보완하기 위해 사용된다.
31. 독립사건과 종속사건
P(A∩B) = P(A) × P(B)이면 A와 B는 독립이라고 말한다. 독립이 아니면, 종속이다.
32. 주성분 분석(PCA)
PCA는 기존의 변수를 일차 결합하여 서로 선형 연관성이 없는 새로운 변수, 즉 주성분들을 만들어 낸다. 원 데이터를 가장 많이 보존하는 주성분들 몇 개만 분석함으로써, 원 데이터의 분포를 조금 잃어버리더라도 계산과 시각화를 용이하게 할 수 있다.
(2) State more than 10 things that you know/can/find ... after you studied the first 4 Chapters.
1. 코딩으로 Random하게 행렬을 생성하는 방법
2. 코딩으로 역행렬 구하는 방법
3. 코딩으로 | A : I |의 RREF를 이용한 가역행렬의 역행렬을 구하는 방법
4. 코딩으로 수반행렬을 이용한 가역행렬의 역행렬을 구하는 방법
5. 선행연립방정식 구하는 방법
7. 최소제곱문제를 QR 분해로 쉽게 푸는 방법
8. 코딩으로 특이값 분해(SVD)를 구하는 방법
----------
Nov.
9. 뉴턴Method에 대해 더욱 알게 되었다.
10. 신경망의 작동 방식 및 기존의 코딩과의 다른 점을 알게 되었다.
11. sage코드로 변수 만드는 방법을 알게 되었다.
12. R언어에 대해 알게 되었고 도형을 그릴 수 있다.
13. share하면서 지식을 더욱 activity 하게 획득 하는 방법
14. finalize 하면서 자기 느낀점을 정리해서 share하는 방법
1. 컴퓨터 특히 sage를 활용하여 다루기 힘든 문제도 컴퓨터로 다루는 방법을 알게 되었다.
2. 이차형식에서 고유값을 앎으로써 개형을 파악할 수 있음을 알게 되었다.
3. 자연 현상을 함수로 나타낼 때 이차형식으로 근사시켜 변화 추이를 예측할 수 있다는 것을 알게 되었다.
4. 행렬의 대각화를 통해서 행렬을 로 분해함으로써 대각선 행렬에 초점을 맞추어 자료를 더욱 쉽게 다룰 수 있게 한다.
5. 모든 행렬은 SVD로 분해가 되며, singular value 들은 모두 실수이고 0보다 크거나 같다는 것을 알게 되었다.
6. 통계학에서 확률변수가 여러 개인 경우를 다루는 결합 확률 분포에 대해서 알게 되었다.
7. 인공 신경망의 학습에서 오차 역전파법을 할 때 미적분학에서 배운 경사하강법이 사용된다는 것을 알게 되었다.
1. 벡터의 사전적 의미(힘과 방향을 갖는 양) 말고도 개 실수의 순서조
를
차원의 벡터라고도 할 수 있다는 점을 새로 알게 되었다. 그동안 벡터라고 하면 3차원 벡터나 2차원 벡터만을 떠올렸고 그보다 높은 차원의 벡터들은 표현할 생각도 못했었는데 알고 보니 상당히 쉬운 일이라는 것을 깨달았다.
2. 중학교 때 연립방정식에서 해가 없다, 유일한 해를 가진다, 무수히 많은 해를 가진다고 표현하던 것을 해가 몇 개가 됐든 존재하는 경우와 해가 존재하지 않는 경우로 나누어, consistent(일관된)한 연립방정식과 inconsistent한 연립방정식으로 얘기할 수도 있다는 것을 배울 수 있었다.
3. 행 사다리꼴(REF)은 아래 세 가지 조건을 만족하는 행렬을 의미한다.
(1) 성분이 모두 0인 행이 존재하면 그 행은 행렬의 맨 아래에 위치한다.
(2) 각 행에서 처음으로 나타나는 0이 아닌 성분은 1이다. 이때 이 1을 그 행의 선행성분 (leading entry, leading 1)이라고 한다.
(3) 행과
행 모두에 선행성분이 존재하면
행의 선행성분은
행의 선행성분보다 오른쪽에 위치한다.
기약 행 사다리꼴(RREF)은 앞의 세 가지 조건에
(4) 선행성분(leading entry in row)을 포함하는 열의 선행선분 외의 성분은 모두 0이다.
를 추가로 만족하는 행렬이다.
(RREF의 예시)
행 사다리꼴과 기약 행 사다리꼴은 각각 Gauss소거법과 Gauss-Jordan소거법에 사용되고, 이 소거법들은 선형연립방정식의 해를 구하는데 사용된다는 점을 알게 되었다. 그동안 연립방정식을 풀 때, 마구잡이식으로 푸는 경우가 잦았다. 이제는 새로 배운 소거법들을 이용하여 더 짧은 시간에 복잡한 연립방정식을 풀 수 있다.
4. 행렬에 대한 기초적인 내용은 그리 어렵지 않았지만, 역행렬을 직접 구하는 일은 꽤 번거로워 보였다. Ch3을 학습함으로써 이제는 행렬 에 단위행렬
을 첨가하여
을 만든 뒤, 이 행렬을 기약 행 사다리꼴 형태로 만들면
가 가역행렬인지 아닌지도 판별할 수 있고, 가역행렬이라면
의 역행렬은 무엇인지를 알 수 있게 되었다.
(첨가행렬을 RREF꼴로 만들어 역행렬을 구하는 예시)
5. Gram-Schmidt 정규직교화 과정
정규직교화는 최소제곱해를 얻기 위해 주로 사용하는 방법인 QR분해에 사용된다는 점을 알 수 있었고 QR분해를 직접 하는 방법도 배울 수 있었다.
6. 고윳값 분해와 특이값 분해 비교, 분석
(1) 형태
고윳값 분해 :
특이값 분해 :
(2) 조건
고윳값 분해 : 가 대각화가능한 정사각행렬 일 때
특이값 분해 : 모든 행렬
(3) 용도
고윳값 분해 : 고윳값 분해가 존재하는 행렬 (고윳값 분해의 조건을 만족)의 역행렬을 구할 수 있다.
특이값 분해 : 모든 행렬 의 일반화된 역행렬을 구할 수 있고, 이는 최소제곱해 연구에 중요하다.
고윳값 분해는 특이값 분해에 비해 상대적으로 쉽지만, 사용할 수 있는 조건이 한정되어 있고, 그 때문에 용도도 제한된다. 특이값 분해는 조금 복잡하지만, 모든 행렬에 적용할 수 있고, 최소제곱해 연구에도 중요한 역할을 해 꼭 알아야 한다. 특이값 분해만 알면 고윳값 분해가 의미 없다고 느낄 수도 있지만, 고윳값 분해를 특이값 분해에 앞서 배운 것이 특이값 분해를 이해하는데 큰 도움을 주므로 고윳값 분해도 공부하는 것이 좋다.
7. 정부호와 부정부호 판단
행렬 가 대칭행렬일 때,
의 이차형식
는 다음을 만족한다.
(1) 의 고윳값들이 모두 양이라면,
는 양의 정부호이다.
(2) 의 고윳값들이 모두 음이라면,
는 음의 정부호이다.
(3) 가 양의 고윳값과 음의 고윳값을 모두 가지면,
는 부정부호이다.
정부호와 부정부호를 판단하는 법을 배워 임계점에서 함수 f가 극소, 극대, 안장점 중 어느 것인지를 판별할 수 있게 되었다.
8. 뉴턴 방법(Newton’s Method)
을
의 근
에 대한 첫 번째 근사값이라 하자. 그럼
은 점
에서의 곡선
에 대한 접선의 방정식이다. 이 접선은
에서
축과 만나는데 이 점의
좌표
를 다시 근
에 대한 첫 번째 근사값이라 하고 앞의 과정을 반복하는 것을 뉴턴 방법(Newton’s Method)라 부른다.
미분적분학 강의 때도 배운 내용이었지만, 직접 문제를 풀 때는 별 도움이 되지 않아 거의 잊어버렸던 내용이다. 하지만, 다시 공부하면서 컴퓨터로 계산을 하게 되면 매우 유용한 방법이라는 것을 새로 배우게 되었다. 이를 사용하면 원하는 근을 소수점 이하 몇째 자리까지라도 원하는 오차 이내로 구할 수 있기 때문이다. 물론 첫 번째 근사값 을 근
에 충분히 가깝게 택해야 한다는 주의사항이 존재하므로 조심해야한다.
9. Taylor 정리
함수 가 연속인 편도함수를 가지면, 적당한
이 존재하여 다음이 성립한다.
만일, 연속인 2계 편도함수를 가지면, 적당한 이 존재하여 다음이 성립한다.
역시 미분적분학 강의 때도 배웠던 내용. 하지만 다변수함수에서의 정리인데다 표현을 간결하게하기 위해 와
를 벡터 형식으로 나타내서 처음엔 이해하기 어려웠다. 이제는 다변수함수까지도 다항함수로 근사할 수 있게 되었다.
10. Fubini 정리
이중적분을 할 때, 특정 조건을 만족하면 적분순서를 바꾸어도 최종 값이 같다는 정리이다. 이중적분에서는 적분의 순서가 적분 난이도를 결정할 때가 많은데 이 때 Fubini의 정리가 큰 도움이 되었다.
11. 순열에 관한 정리
(2)에서 k개를 원형으로 배열하는 경우, 한 바퀴 돌리더라도 모두 같은 배열이므로 k로 나누어준다.
(3)에서 k개를 목걸이로 만드는 경우, 원형이고, 뒤집어도 모두 같은 목걸이이므로 2k로 나누어준다.
순열의 정의에 더해 이 두 가지를 새로 배우게 되었다.
12. 베이즈 정리
베이즈 정리는 불확실성 하에서 의사결정 문제를 수학적으로 다룰 때 중요하게 이용된다는 점과 정보와 같이 눈에 보이지 않는 무형자산이 지닌 가치를 계산할 때 유용하게 사용된다는 점을 새로 알게 되었다. 따라서 최근 각광받는 데이터 산업에서 활약하려면 이러한 정리를 알아두는 것이 매우 중요하다고 생각했다.
13. 확률질량함수 vs 확률밀도함수
확률질량함수와 확률밀도함수에 대해 공부하면서 이 둘은 서로 비슷한 내용이지만 확률변수의 종류에 따라 다른 함수를 사용해야한다는 것에 주의해야 한다는 점을 배우게 되었다.
이산확률변수일 경우 => 확률질량함수
연속확률변수일 경우 => 확률밀도함수
14. 정규분포곡선
정규분포는 중심극한정리의 발견 덕분에 현실에서 가장 유용한 분포 중 하나라는 것을 알게 되었다. 또, 정규분포 곡선의 성질들에 대해 설명할 수 있게 되었다.
15. 중심극한정리
중심극한정리를 통해 모집단의 분포유형에 관계없이 똑같은 유형의 분포(정규분포)로 근사할 수 있다는 것을 알게 되었다. 중심극한정리를 사용하려면 확률변수들이 서로 독립이어야 하고 동일한 확률분포를 가져야 한다는 주의해야 할 부분도 새로 배웠다.
16. 표준코시분포
중심극한정리를 적용할 수 없는 하나의 예시에 대해서 알게 되었다.
17. 결합확률분포 vs 결합밀도함수
(결합확률분포)
(결합밀도함수)
확률변수가 늘어났다는 점을 제외하면, 확률질량함수나 확률밀도함수의 성질과 큰 차이가 없다고 느꼈다. 또, 마치 편미분에서 하나의 변수에 대해서만 변화율을 생각했듯이 주변확률이란 하나의 확률변수에 대해서만 고려한 확률이라는 것을 새로 배웠다.
(3) QnA 담당교수님 다른 학생들이 업로드한 Q에 10개 이상의 자신의 Comment or Answer (Discussions) 를 주시오.
Q : 임의의 10차 행렬을 생성하여, 가역인지 아닌지를 확인하기
A : 교재에 있는 코드를 사용하여 임의의 정수 원소들로 이루어진 10차 행렬을 생성하고, 가역인지를 확인하고, 행렬식을 구한 뒤, 행렬식이 0이 아닌 경우에는 역행렬도 구했다. 가역인지를 확인하는 코드가 오작동하는 경우가 있어 2차 행렬로 줄여서 실험해보았다.
느낀 점 : 함수의 오류가 언제 발생하는지를 실험하는 게 상당히 재미있었다. 나름의 답이 도출되었을 때는 물론 오답일 수도 있고 결국, 원인도 찾지 못했지만 뿌듯하기도 했다. sage의 유용함을 처음으로 실감하기도 했다. random한 행렬을 만들고 계산하는 속도가 너무나 빨랐기 때문이다.
Q : [Discussion] 차세대 아이캠퍼스 개선 의견들
A : 1. 글을 작성하고 나서야 토론 내용을 볼 수 있다는 점이 불편했다.
2. 수식을 올리면 오류가 나온다.
3. 모바일 환경에서 링크를 열면 앱이 응답하지 않는다. QnA, 토론 탭을 이용할 때 긴 문장을 읽기가 힘들다.
4. 어떤 탭에 무슨 컨텐츠가 있는지 직관적으로 알기가 어렵다.
5. 새 게시물이 올라왔을 때, 전구 모양 같은 알림 표시가 있으면 좋겠다. 수업 동영상을 시청할 때, youtube처럼 화면을 줄일 수 있으면 좋겠다.
느낀 점 : Finalize하면서 나는 느끼지 못했던 아이캠퍼스의 불편한 점들, 생각하지 못했던 개선점들을 다른 분들의 의견으로 깨닫게 되었다.
Q : 수업 요약(4.1~5.2 부분)
A : 일차독립과 부분 공간, 기저와 차원, 정사영과 최소제곱해 그리고 QR 분해, 선형변환, 핵과 치역에서 배운 정의들을 풀어서 써 보았다.
느낀 점 : 그날 배운 정의들을 복사 붙여넣기 한 것뿐이라 질이 낮았다고 생각한다. 다음에 수업 요약을 하게 되면 더 좋은 퀄리티로 해봐야겠다. 한편으로는 복습도 어느 정도 되고 유익했던 부분도 있었다.
Q : 해가 존재하지 않는 7×5행렬의 최소제곱해를 QR분해와 정규방정식으로 구하기
A : random하게 7×5행렬을 생성하고, 교재에 있는 코드로 QR분해를 이용했다. 거기에 추가로 정규방정식을 활용해 최소제곱해를 구해보았다.
느낀 점 : 같은 답을 구하는 일에 서로 다른 코드를 사용할 수 있다는 점을 확실히 알게 되었다. 컴퓨터를 이용할 때는 정확한 답을 내놓는 것만이 아니라 얼마나 단순하게 코드를 작성하는가, 얼마나 빨리 내놓는가도 중요한 부분이라고 느꼈다. 내가 생각하기에 이번 문제에서는 정규방정식 쪽이 코드 작성하기에 더 쉬웠다.
Q : AI for dummies p9~p10 번역
A : Narrow AI와 Broad AI를 정의하고 Narrow AI의 장단점을 설명하는 부분을 번역했다. 또, 구체적으로 어떻게 AI가 활용되는지 Amazon을 통해 예를 제시하는 부분과 기업들이 브랜드화를 위해 자신들이 사용하는 AI의 ‘똑똑함’을 나타내기 위한 새 단어들을 만들어낸다는 내용도 있었다.
느낀 점 : 영어책을 번역하는 것에 부담을 느꼈지만 번역해야 할 부분이 짧기도 했고 번역기의 도움을 받으니 처음에 생각했던 것보다는 쉬웠다. AI에 대한 기초적인 지식을 쌓을 수 있어서 좋았다. 구체적인 예시를 들어줘서 AI의 활용성을 더 깊이 있게 이해할 수 있었다. 내가 번역한 부분보다 앞쪽에서 언급된 개념인 Strong AI, Weak AI 등은 번역할 때 어려운 부분이었다. 기회가 되면 책을 전체적으로 번역해보고 싶다.
Q : 고윳값과 특정방정식의 관계
A : 고윳값과 특성방정식이란 무엇인지 먼저 정의를 설명했다. 이후 특성방정식을 풀어냄으로써 어떻게 고윳값을 구할 수 있는지를 보였다. 그리고 교수님이 댓글로 올려주신 사이트에서 대수학의 기본정리에 대한 설명을 추가하여 고윳값이 항상 존재한다는 것을 추가해서 Finalize했다.
느낀 점 : 고윳값에 대해 배우자마자 생겼던 의문인 ‘고윳값은 항상 존재하는가?’를 여러 가지로 고민해보고 글을 썼다. 조금 잘못된 결론이 나와서 교수님께서 친절하게 알려주셨는데, 특히 교수님께서 올려주신 사이트에 강의시간에 배우는 교재에도 없는 내용들이 많았다.
Q : sage로 QR분해와 정규방정식 코드를 작성했을 때, 실행 시간 비교하기
A : time()함수를 사용하여 실행 시간을 측정할 수 있다. 이 때, QR분해보다 정규방정식으로 최소제곱해를 찾는 시간이 약 13배 빠르다.
느낀 점 : 김**님이 해주신 Re-Finalize. 내가 코드 작성의 난이도에만 신경을 썼다면, 김명준님은 코드의 실행 시간에 집중해 새로운 결과를 보여주셨다. 이런 식으로 한 사람의 결과에 또 다른 내용을 보태어 유의미한 결과를 얻는 것이 이 수업의 핵심적인 내용이라고 생각했다.
Q : [Discussion] 한경 특집 10월 9일 #수학이 세상을 바꾼다. (고등학교 수학교육과정 축소에 대한 토론)
A : 1. 벡터가 고등학교 수학과정에서 사라진다는 점이 불안하게 느껴진다. 특히 기계공학의 기초는 역학이고 역학이란 힘을 다루는 학문인데 벡터에 대한 개념 없이 역학을 이해할 수 있을지 의문이 든다.
2. 교육과정의 축소와 더불어 줄어든 개념마저도 깊이 있게 배우는 것이 아닌 단순 계산을 반복하게 한다는 점도 문제이다.
3. 고등학생들에게 수학이 사용되는 다양한 전공분야를 접할 수 있게 해 수학에 흥미를 느끼게 해줘야한다.
4. 기본지식과 개념이해를 중점으로 하고, 복잡한 계산은 컴퓨터에 맡기는 방식의 교육이 더 효과적일 것이다.
느낀 점 : 고등학교 다닐 때만 해도 선배들이 ‘너희는 행렬 안 배워서 좋겠다.’는 말에 공감 했었는데 요즘은 절대 아니다. 이제 벡터도 안 배우게 될 후배들이 과연 공학도의 길을 걸을 수 있을지 걱정스러웠다. 수업에 계산기나 컴퓨터를 적극적으로 활용해야 한다는 의견에도 공감이 되었다.
Q : 다변수함수에서의 Taylor 정리란?
A : 변수가 하나인 함수일 때와 마찬가지로 함수를 한 점 주변에서 다항함수로 근사할 수 있도록 해준다. 다항함수는 다른 형태의 함수들보다 다루기가 상대적으로 훨씬 쉬운 함수이므로 유용한 정리이다.
느낀 점 : 처음에 나는 Re-Finalize를 꺼려했다. 다른 사람이 이정도면 충분하다는 생각으로 Finalize를 했는데 그것을 다시 Re-Final한다는 것은 그 사람을 무시하는 것이라고 생각했기 때문이다. 그런데 내 질문에 내가 원하는 형태가 아닌 다른 점을 기준으로 다른 분이 Finalize하신 것을 보고 Re-Finalize해야겠다고 생각했다. 서로의 다른 시각을 통해 사고를 확장하는 것이 이 수업의 장점임을 다시 한 번 깨달았다.
Q : [Discussion] 알고리즘과 수학은 왜 배워야 하는가?
A : 1. 알고리즘의 작동환경에 대해 많은 신경을 써야한다. 오류가 생겼을 때, 사용자가 정확히 어떤 부분에서, 어떤 오류가, 왜 발생하는지를 파악해야 그것을 고칠 수 있기 때문이다.
2. 컴퓨터에게 알맞은 알고리즘을 짜는 것도 중요하다. 사람에게 적합한 알고리즘과 컴퓨터에게 적합한 알고리즘에는 차이가 있을 수 있기 때문이다.
3. 수학적인 기초가 없더라도 이미 만들어진 tool들이 존재하는 tool box를 사용하는 것은 가능하다. 그러나 그것들을 이해하고, 새로운 tool이나 나만의 AI를 만들기 위해서는 그에 맞는 수학적 지식이 반드시 필요하다.
느낀 점 : 왜 내가 이 수업을 듣고 있는지에 대해 돌아보게 만드는 좋은 discussion이었다. 학부연구생으로서 공부하고 계시는 분의 경험담을 들으니 더 열심히 해야겠다고 생각했다. 다양한 경험을 한 분들이 의견을 공유해주시니까 큰 도움이 된다고 느꼈다.
Q : [Discussion] 베이즈 정리, 조건부 확률과 몬티 홀 문제
A : 몬티홀 문제란 세 개의 문들 중에 하나를 선택하여 문 뒤에 있는 선물을 가질 수 있는 게임쇼에 참가했다. 한 문 뒤에는 자동차가 있고, 나머지 두 문 뒤에는 염소가 있다. 이때 어떤 사람이 예를 들어 1번문을 선택했을 때, 게임쇼 진행자는 3번문을 열어 문 뒤에 염소가 있음을 보여주면서 1번 대신 2번을 선택하겠냐고 물었다. 참가자가 자동차를 가지려할 때 원래 선택했던 번호를 바꾸는 것이 유리할까? 라는 내용이다.
1. 경우의 수를 하나하나 따져보면, 처음의 선택을 바꾸는 것이 유리하다.
2. 조건부 확률이나 베이즈 정리를 적용했을 때도 선택을 바꾸는 것이 유리하다.
2. 문의 개수를 훨씬(100만개까지) 늘려보면, 직관적으로 생각했을 때도 처음의 선택을 바꾸는 것이 유리함을 알 수 있다.
3. ‘선택하지 않은 문들 중 염소가 있는 문 하나를 공개해주겠다. 처음 선택을 바꿀 것인가?’ 대신 ‘선택을 바꾼다면 처음에 선택하지 않은 두 문 뒤에 있는 모든 물건들을 주겠다. 처음 선택을 바꿀 것인가?’라고 생각한다면, 즉 선택지를 조금 다르게 해석하면 확률 계산도 할 필요 없이 문을 두개 고른다는 생각에 쉽게 선택을 바꿀 수 있다.
느낀 점 : 몬티 홀 문제는 정말 유명하다. 그에 대한 해설도 당연히 잘 알려져 있다. 하지만 조건부확률과 베이즈 정리에 대해 처음 수업에서 배웠을 때 나는 이 문제를 떠올리지 못했다. 질문자님의 새로 배운 내용과 알고 있는 지식을 연결하는 능력이 뛰어나다고 느꼈다.
Q : [Discussion] 알파 시리즈에 대한 토론
A : 1. 최근의 알파 시리즈는 자가 학습이 가능하기 때문에 빅데이터 학습이 필요 없어졌다. 이는 모든 분야에서 AI가 활약할 수 있는 가능성을 제시하는 것이다.
2. 알파 시리즈는 단순히 기보를 외우는 것이 아니라 인공지능들끼리 서로 게임(시뮬레이션)을 하며 학습한다.
3. 최근에는 보드 게임이 아닌 스타크래프트2에서도 인공지능이 인간을 꺾는 모습도 보여주었다.
느낀 점 : 알파 시리즈에 대해서는 그 당시 최고의 바둑 기사라는 커제 9단을 꺾었다는 기사 이후로는 별로 관심이 없었는데, 이제는 인간의 기보 없이 바둑 규칙만으로 스스로 학습한다는 내용이 정말 충격적이었다. 또, 바둑 뿐 만 아니라 모든 보드 게임으로 영역을 확장했다고도 한다. 심지어 보드 게임 이외의 분야에서도 성과를 내고 있다는데 요새 최고의 인기 게임인 ‘리그 오브 레전드’에서는 어떨지 궁금해졌다.
Q : 결합 확률분포란?
A : 이미 배운 내용인 이산 확률 분포에서 이산 확률 변수가 하나 더 추가된 내용이다. 확률 변수가 한 개일 때보다 크게 어렵지는 않다. 관련 정리를 살펴보면 1. 어떤 확률이든 0보다 크거나 같다. 2. 모든 확률을 합하면 1이다. 3. 이중으로 된 Σ로 특정 구간의 확률을 구한다. 이와 같이 확률 변수가 한 개일 때와 별 차이가 없다.
느낀 점 : 결합 확률분포의 정의와 그와 관련된 정리를 소개했다. 변수가 하나 더 늘어나는 게 다변수 함수 생각이 나서 겁먹었는데 다변수 함수 때보다 훨씬 내용이 쉽게 느껴졌다.
Q : 거듭제곱법의 원리
A : 어떠한 행렬을 충분히 거듭제곱하면 가장 큰 고윳값과 그에 대응하는 고유벡터를 구할 수 있다는 것이 거듭제곱법이다. 이는 행렬을 거듭제곱하다보면 가장 큰 고윳값이 우세하게 적용되기 때문에 가능하다. 충분히 거듭제곱한다는 것은 n = 10 등으로 고정된 것이 아니라 사용자가 정확도를 어느 정도까지 할 것인지에 따라 달라진다. 또, 당연히 행렬이 거대할수록 거듭제곱하는 것이 시간과 비용 면에서 불리하므로 이런 점을 고려해서 n값을 정할 수 있다.
느낀 점 : 거듭제곱법이 어떻게 가장 큰 고윳값을 찾는지 알 수 있었다. 또, 조금 애매한 표현에 대해 정확하게 이해하고 넘어갈 수 있었다.
(4) 아래 (첨부한) PBL 보고서에 <자기평가>, <동료평가> + <자신이 QnA 에 업로드한 Q and Answer (Reply) 를 모았고>, Exam 1 과 Project 수정본을 첨부합니다. 그리고 양과 질 그리고 독창성으로 평가받습니다. [The First or The Best!입니다.] Nov PBL 에 파란 글을 보태서 Final PBL로 만들었습니다.
Participation [참여 평가 2] Ch 2장. Participation (참여 부분)
자기 평가와 본인의 Project (Term paper) Proposal 에 대해 아래를 채우시오.
1. (20점) 본인이 그간 Q&A, 동료학생, “본"강좌 등에 기여한 내용을 간단히 서술하세요!
(1) QnA 참여 회수 <QnA에서 직접 확인하세요> : 각 주별 (토요일에서 금요일)
1주차(8.31~9.6) : 총 1 회, 2주차(9.7~9.13): 총 1 회, 3주차(9.14~9.20): 총 4회,
4주차(9.21~9.27): 총 5 회 5주차(9.28~10.4) : 총 6 회, 6주차(10.5~10.11) : 총 8 회,
7주차(10.12~10.18) : 총 7 회, 8주차: 총 2 회(10.19~10.25) 9주차 : 총 3 회(10.26~11.1),
10주차: 총 6 회(11.2~11.8), 11주차: 총 22 회(11.9~11.15), 12주차: 총 11 회(11.16~11.22)
13주차 : 총 2 회(11.23~11.29), 14주차: 총 2 회, 15주차: 총 2 회.
총 74 회 (질문: 44 회, 답변/수정: 30 회)
(1) 온라인 출석 회수 : 48 회 / 48 회
(2) 오프라인 출석 및 결석 회수 : 14 회 / 15 회
(2) 다음 밑줄 친 곳에 들어갈 내용을 고르시오.
(위 박스 안의 키워드에서 자신이 충분히 이해하고 있는 것을 표시하시면 됩니다.)
나는 고윳값 ,고유벡터 Taylor정리, 안장점, 이항 분포, 연속확률분포, 중심극한정리, 공분산과 상관계수 의 개념을 이해하고 설명할 수 있으며 (간단한 것은 손으로, 복잡한 것은 컴퓨터 를 이용하여) 계산하여 그 의미를 설명할 수 있다.
안장점이란 함수 f의 임계점에서 f의 2계 편도함수로 구성된 헤시안의 고윳값들이 서로 다른 부호일 때 나타난다. 이는, 어느 한 축에서 볼 때는 극댓값이지만 다른 축에서 볼 때는 극솟값임을 의미한다. 그림으로 나타내면 다음과 같다. (여기서, x축을 기준으로는 극댓값이지만, y축을 기준으로는 극솟값인 점을 찾을 수 있다. 이것이 바로 안장점이다.)
한 번의 시행에서 사건 A가 일어날 확률이 p라 하자. 이 시행을 n회 독립적으로 반복할 때, 사건 A가 일어나는 횟수를 X라 하면, X의 확률분포는 다음과 같다. 이를 이항 분포라고 부른다. 이는 또한, n번 베르누이 시행 시의 성공 확률분포와 같다. 따라서 B(n,p)로 표기한다.
연속확률분포란 확률밀도함수(pdf)를 이용해 분포를 표현할 수 있는 경우를 의미한다. 연속확률분포를 가지는 확률변수는 연속 확률변수라고 부른다. 자주 사용되는 연속확률 분포에는 균등분포, 정규분포, 지수분포 등이 있다. |
중심극한정리란 동일한 확률분포를 가진 독립 확률변수 n개의 평균의 분포는 n이 적당히 크다면 정규분포에 가까워진다는 이론이다. 그림으로 나타내면 다음과 같다. 물론 예외는 존재한다. 예를 들어 모집단이 표준 코시 분포를 따를 때는 n이 커져도 정규분포에 가까워지지 않는다.
확률변수가 여러 개일 때도 분포가 어떻게 퍼져있는지를 파악하는 것은 중요하다. 때문에 공분산이라는 개념을 사용하고 확률변수가 여러 개일 때 생기는 문제점을 해결하기 위해 상관계수를 사용한다. 좀 더 자세히 이야기하면, 공분산은 X의 편차와 Y의 편차를 곱한 것의 평균이다. 그런데 공분산은 X와 Y의 단위의 크기에 영향을 받는다는 문제점이 있다. 이것을 보완하기 위해 상관계수(Correlation)를 사용한다. 상관계수라는 개념은 확률변수의 절대 크기에 영향을 받지 않도록 표준화 시킨 것이고, 분산의 크기만큼 나누었다고 생각하면 된다. |
나는 경사하강법 의 개념을 이해하고 설명할 수 있으며 (간단한 것은 손으로, 복잡한 것은 컴퓨터 를 이용하여) 계산하여 그 의미를 설명할 수 있다.
나는 Q-Q plot 의 개념을 이해하고 설명할 수 있으며 (간단한 것은 손으로, 복잡한 것은 컴퓨터 를 이용하여) 계산하여 그 의미를 설명할 수 있다.
나는 PCA 의 개념을 이해하고 설명할 수 있으며 (간단한 것은 손으로, 복잡한 것은 컴퓨터 를 이용하여) 계산하여 그 의미를 설명할 수 있다.
(3) 개인/동료와 같이 “본” 강좌를 학습하면서 배우거나 느낀 점은?
독특한 수업방식이 마음에 들었다. 다른 수업들을 추천하는 이유가 ‘저 교수님은 학생들을 열정적으로 가르치신다.’라면, 이 수업을 추천하는 이유는 ‘이 수업에서는 내가 열정적으로 배울 수 있어.’이다. 또, 토론을 적극적으로 권장하고 있기 때문에 다양한 전공과 학년의 학우 분들과 함께 토론하면서 교수님이 아니라 학우분들께도 배움을 얻을 수 있다는 점도 좋다. ‘들으면 잊는다. 보면 기억한다. 그리고 행동하면 이해한다.’라는 말이 있다. 지속적으로 QnA게시판에서 활동하면서 새로운 수학적 지식들을 ‘이해하게’ 되었다고 느낀다.
첫 번째로는 질문을 하는 것이 그리 어렵지 않다는 것입니다. 처음에는 그저 혼자서 궁금증을 풀려고 하였지만, 분명 타인의 도움이 필요한 부분이 있었습니다. 그래서 질문을 QnA에 올리면 그에 대한 해답들을 제공해주었고, 혼자서 학습해 나아가는 것보다는 동료들과 질문하고 서로 답변해주면서 나아가는 것이 현재 지식 습득 방식에 적합하다는 것을 느끼게 되었습니다. 질문을 하는 과정에서 또한, 답변을 공부하는 과정에서 궁금한 내용이 정리되어 이해가 잘 되었습니다. 또한, 혼자서 얻었던 정보보다 더 많은 정보를 제공받을 수 있었고, 이 세계에 엄청난 정보가 널려있다는 사실을 비로소 느끼게 되었기 때문입니다. 따라서 더 적극적인 자세로 질문과 답변에 참여하여야겠다는 사실과 방대한 양의 자료들을 학습하고, 다루기 위해 노력해야겠다는 것을 느끼게 되었습니다. 결론적으로 이 수업에 참여하면서 꾸준한 참여를 하는 분들을 보며 주어진 바에 최선을 다하고자 노력해야겠다고 느끼게 되었습니다. 또한, 질문에 대한 대답을 잘해주고, 정보를 공유하는 분들을 보며 지식의 확장과 잘 모르는 누군가를 앞으로 끌어주는 역할 하기 위해서 부단한 노력을 기울여야겠다고 느꼈습니다.
Ch 3장. PBL Participation/Activity Part
(3장. PBL 참여 부분 )
한 학기 동안 QnA 통하여 논의에 참여했던 내용에 자신도 참여했던 것 모두와 기타 자신이 제공한 유의미한 정보 또는 그것에 자신이 참여한 부분을 모두 아래에 정리하시면 됩니다. (20점)
< Final OK by SGLee or Final OK by TA only >
1. HW2 임의의 10X10 행렬 생성하여 가역여부 판단하기
HW2 코드
실행 결과
수 체계를 실수로 해 보았을 때
HW2에 대한 final
처음에 임의로 10x10 행렬을 정수 체계에서 생성하여 가역여부를 판단해본 결과 행렬식이 0이 아님에도 A.is_invertible() 은 False 나오는 기이한 현상이 관찰되었다. 그래도 이 경우 역행렬과 원래 행렬을 곱해보았을 때 단위행렬이 제대로 나왔다. 그러나 임의의 10x10 행렬을 실수 체계에서 생성하여 가역여부를 판단해 보았을 때는 RREF를 구해보거나 원래 행렬과 역행렬을 곱해보았을 때 단위 행렬이 나오지 않는 플로팅 에러가 발생하는 모습을 관찰할 수 있었다. 플로팅 에러는 컴퓨터의 고질적인 문제인지 궁금했다.
정수로 선언된 행렬이 가역 행렬이 존재함에도 불구하고 Is_invertible() 함수가 False를 반환하는 문제에 대한 원인
작성자 : 김**(2017****03)작성일 : 9월 10일 오후 8:52
조회수 : 25
HW2 과제에서 정수로 n*n 행렬을 선언하고 is_invertible() 함수로 가역행렬인지 판단하는 경우 가역행렬이 존재함에도 불구하고 Is_invertible()함수가 False를 반환하는 문제를 발견할 수 있었습니다.
< 2x2 행렬에서 해당 문제를 발견할 수 있는 간단한 코드 >
A = random_matrix(ZZ, 2, 2)
print "random하게 생성한 2x2행렬"
print A
print
# 가역행렬인지 확인
print "A.is_invertible 함수"
print A.is_invertible()
print
print "A의 역함수"
print A.inverse()
< Output >
random하게 생성한 2x2행렬
[-4 2]
[ 0 -3]
A.is_invertible 함수
False
A의 역함수
[-1/4 -1/6]
[ 0 -1/3]
이 문제에 대해서 Q&A 게시판을 통해 다양한 추측과 실험이 진행되었지만 |A.det()| = 1이 아닌 정수로 선언된 가역행렬 A에서
A.is_invertible()함수가 False를 반환한다는 실험적 관찰 결과만 얻었을 뿐, 왜 이러한 현상이 일어나는지 명확한 원인을 찾지 못하였습니다.
명확한 원인을 찾기 위해서 is_invertible()함수가 어떻게 구현되었는지 조사를 했으며, 코드를 분석한 결과 어느정도 명확한 원인을 찾은 것 같습니다.
sage Github 주소 : https://github.com/sagemath/sage
아래의 코드는 is_invertible() 함수입니다.
def |
is_invertible(self): |
|
r""" |
|
Return True if this matrix is invertible. |
|
|
|
EXAMPLES: The following matrix is invertible over |
|
`\QQ` but not over `\ZZ`. |
|
|
|
:: |
|
|
|
sage: A = MatrixSpace(ZZ, 2)(range(4)) |
|
sage: A.is_invertible() |
|
False |
|
sage: A.matrix_over_field().is_invertible() |
|
True |
|
|
|
The inverse function is a constructor for matrices over the |
|
fraction field, so it can work even if A is not invertible. |
|
|
|
:: |
|
|
|
sage: ~A # inverse of A |
|
[-3/2 1/2] |
|
[ 1 0] |
|
|
|
The next matrix is invertible over `\ZZ`. |
|
|
|
:: |
|
|
|
sage: A = MatrixSpace(IntegerRing(),2)([1,10,0,-1]) |
|
sage: A.is_invertible() |
|
True |
|
sage: ~A # compute the inverse |
|
[ 1 10] |
|
[ 0 -1] |
|
|
|
The following nontrivial matrix is invertible over |
|
`\ZZ[x]`. |
|
|
|
:: |
|
|
|
sage: R.<x> = PolynomialRing(IntegerRing()) |
|
sage: A = MatrixSpace(R,2)([1,x,0,-1]) |
|
sage: A.is_invertible() |
|
True |
|
sage: ~A |
|
[ 1 x] |
|
[ 0 -1] |
|
""" |
|
return self.is_square() and self.determinant().is_unit() |
별다른 연산 없이 self.is_square() 함수와 self.determinant().is_unit()이라는 두 함수의 반환 값을 and 연산하여 반환함을 확인할 수 있습니다.
두 함수가 무엇을 의미하는지, 어떻게 구현되었는지를 확인해보았습니다.
is_square()함수는 정사각행렬일 경우 True를 반환하는 함수이고
is_unit()함수는 해당 함수를 정확하게 이해하진 못했지만 정수이면 False를 유리수이면 True를 반환하는 함수입니다.
(주석에서 말하는 parent ring이 무엇인지 잘 모르겠습니다...)
아래는 해당 함수의 코드입니다.
def |
is_unit(self): |
|
r""" |
|
Return ``True`` if ``self`` is a unit in its parent ring. |
|
|
|
EXAMPLES:: |
|
|
|
sage: a = 2/3; a.is_unit() |
|
True |
|
|
|
On the other hand, 2 is not a unit, since its parent is `\ZZ`. |
|
|
|
:: |
|
|
|
sage: a = 2; a.is_unit() |
|
False |
|
sage: parent(a) |
|
Integer Ring |
|
|
|
However, a is a unit when viewed as an element of QQ:: |
|
|
|
sage: a = QQ(2); a.is_unit() |
|
True |
|
""" |
|
return not not self |
즉, 정수로 행렬을 생성할 경우 해당 행렬의 determinant가 정수형이 되며 is_unit()함수가 False를 반환하게 되어
is_invertible() 함수에서 False를 반환하는 것으로 보입니다.
is_unit()함수를 왜 정수형일 때 False를 반환하도록 구현했는지, 1, -1은 왜 is_invertible() 함수가 True를 반환하는지 아직 모든 의문을 해결하진 못했지만 정수형으로 선언된 가역 행렬에서 is_invertible()함수가 False를 반환하는 이유에 대해서는 충분히 설명이 될 것이라 생각합니다.
[Solved by 김**]
이전 다음
1개의 댓글
이** 9월 11일 오후 3:22
제가 이해한 대로 설명을 드리면, ... 1. 행렬을 생성할 때, 행렬을 이루는 성분을 어느 집합에서 택했는지도 중요합니다. 그에 따라 어디까지 계산할 수 있는지를 결정하는 듯 합니다. 예를 들어, 유리수와 실수 집합은 체(field)이고, 정수 집합은 환(ring)입니다. 환이 체보다 더 큰 개념입니다. 언급하신 [Parent Ring]이라고 하는 것은 예를 들어, 구체적인 행렬의 성분이 어느 숫자들의 집합에서 온 것인지를 살펴보는 것 같습니다. 2. Sage에서는 숫자들을 성분으로 하는 행렬 외에도 예를 들어, 다항식이 성분으로 주어진 행렬도 다루기 때문에 계산을 위해서는 성분이 어느 집합인지를 고려하는 것 같습니다. (다항식 전체의 집합도 역시 환입니다.)
2. SVD의 singular value에 대해서 질문
질문에 대한 답변(여정민 님의 링크)
질문에 대한 final
질문에 대한 추가 설명(박지원 님의 링크에 실린 내용)
re-finalized
이 질문을 통해 SVD를 구하는 과정에서 나왔던 AAT, ATA는 positive semidefinite 행렬들로서 항상 0 이상의 eigenvalue들을 갖는다는 것을 알게 됨으로써 궁금증이 풀리게 되었다.
3. dummies 번역한 것
p3~p4 부분을 번역한 내용
4. 한경 특집 10월 9일 #수학이 세상을 바꾼다. 토론
본문(기사) 내용
댓글로 토론한 내용
수학교육이 어떤 방향으로 나아가야 할지를 많은 분들과 함께 토론하였다. 나 말고도 많은 분들이 현재의 잘못된 수학교육을 걱정하고 계셨다.
이상구 교수님이 최종적으로 마무리한 dummies 내용
이상구 교수님이 최종적으로 마무리한 dummies를 보니 처음에 내가 번역한 내용보다 나중에 이상구 교수님이 최종적으로 마무리한 부분이 번역이 더 잘 되어 있다고 느꼈다. 그래도 책 번역에 기여를 한 것 같아 좀 뿌듯함을 느낀 것 같다.
4. SVD의 u_i=Av_i/(singular value_i)의 관계에 대한 질문
질문에 대한 final
A=U(시그마)V^T와 같고 이는 AV=U(시그마)의 관계이므로 이 부분을 잘게 나누면 u_i=Av_i/(singular value_i)의 관계가 됨을 이해할 수 있었다.
5. 데이터의 중요성을 강조하는 글에 대한 comment
이 글을 보며 아직 우리 기업들을 외국의 다른 기업과 비교해 데이터의 양이 부족하다는 것과 그저 사람들의 발자취에 불과한 데이터들도 모이면 경향을 이용해 가공할 수 있다는 것을 알게 되었다. 데이터의 중요성을 느낄 수 있는 글이었다.
6. 통계학 사후 확률에 관한 질문
통계학 사후 확률에 대한 질문 finalize
통계학 사후확률에 대한 질문 re-finalize
확률이 독립 시행일 경우 전에 일어났던 사건이 다음 일어날 사건에 영향을 미치지 않는다. 하지만, 사후확률은 관측 후에 그 사건이 발생한 확률로 수가 늘어날수록 대수의 법칙을 만족하게 된다는 것을 알게 되었다.
7. 베이즈 정리, 조건부 확률과 몬티 홀 문제 Monty hall Dilemma
몬티 홀 문제를 통해 베이즈 정리, 조건부 확률을 알아봅시다.
몬티 홀 문제란??
세 개의 문 중에 하나를 선택하여 문 뒤에 있는 선물을 가질 수 있는 게임쇼에 참가했다. 한 문 뒤에는 자동차가 있고, 나머지 두 문 뒤에는 염소가 있다.
이때 어떤 사람이 예를 들어 1번 문을 선택했을 때, 게임쇼 진행자는 3번 문을 열어 문뒤에 염소가 있음을 보여주면서 1번 대신 2번을 선택하겠냐고 물었다.
참가자가 자동차를 가지려할 때 원래 선택했던 번호를 바꾸는 것이 유리할까?
.. 참가자가 처음 문을 선택했을 때, 그 문이 당첨될 문일 확률은 1/3입니다. 이는 변하지 않습니다.
.. 참가자가 중간에 문을 바꾸거나 그대로 있을 때의 당첨 확률은 각각 어느정도일까요?
경우의 수를 하나하나 세서 계산해봅시다.
경우의 수 1번째 ___ 처음부터 옳은 문을 골랐을 경우 (1/3)
사회자가 남은 두 문 중에 아무거나 열 수 있다.
바꾼다 - 실패!
바꾸지 않는다 - 성공!
경우의 수 2번째 ___ 처음에 틀린 문을 골랐을 경우 (2/3)
사회자가 남은 문 중에 (하나 남은) 틀린 문을 열어준다
바꾼다 - 성공!
바꾸지 않는다 - 실패!
그러므로
문을 골랐을 때,
바꿨다 -> 실패1/3 성공 2/3
바꾸지 않았다 -> 성공1/3 실패 2/3 가 되는 것입니다.
즉, 어느 문을 골랐든, 사회자가 다른 문 중 실패 문을 열어 확인시켜주면, 선택을 바꾸는 게 유리한 것입니다.
왜냐, 지금 고른 문이 성공/실패냐의 조건에 따라 남은 문의 성공/실패도 갈리기 때문입니다.
그렇다면 반대로, 조건에 따라 다시 성공/실패 여부를 살펴봅시다.
내가 고른 문이 성공/실패인지 모를 때,
성공이라는 가정 하에 (P(처음성공)=1/3)
문을 바꾼다면 실패하겠죠 (P(바꿈|처음성공)=0)
문을 바꾸지 않으면 성공이구요 (P(바꾸지않음|처음성공)=1)
처음 문이 실패라는 가정 하에 (P(처음실패)=2/3)
문을 바꾸면 성공하겠죠(P(바꿈|처음실패)=1)
바꾸지 않으면 실패구요(P(바꾸지않음|처음실패)=0)
그렇다면 P(바꿈)과 P(바꾸지 않음)은 어떻게 되는 걸까요?
P(바꾸고 성공할 경우) = P(바꿈|처음성공)P(처음성공) + P(바꿈|처음실패)P(처음실패) 겠죠?
=0 1/3 + 1 2/3 = 2/3
P(바꾸지않고 성공할 경우) = P(바꾸지않음|처음성공)P(처음성공) + P(바꾸지않음|처음실패)P(처음실패)
=1 1/3 + 0 2/3 = 1/3
바꾸는게 바꾸지 않는것보다 두배 유리하군요!
바꾸지 않고 성공할 경우의 수는? 맨 처음부터 옳은 문을 고른 경우의 수밖에 없습니다
P(바꾸지않음 ∩ 성공 ) = 1/3
바꾸고 실패할 경우의 수 또한 맨 처음부터 옳은 문을 고른 경우밖에 없군요
P(바꿈 ∩ 실패) = 1/3
그런데 이것들은 각각, 바꾸지 않은 경우에서 성공할 확률와, 바꾼 경우에서 실패할 확률과 같습니다 P(A∩B) = P(A|B)P(B) = P(B∩A) = P(B|A)P(A)
베이즈 정리죠!
어떤가요, 조금 쉬워지셨나요? 저는 지금 바꿈바꾸탈츠붕괴가왔습니다. 살려주세요
이상구(LEE SANGGU)11월 4일 오전 4:24
베이즈 정리를 잘 설명하는 예 입니다
김**(2014****41)11월 5일 오전 00:48
바꿈바꾸탈츠붕괴 ㅋㅋㅋ
설명을 들으니 이해가 잘 되네요.
논리적 이해는 재형님 설명만으로 충분한 것 같고, 좀 논점 밖이지만 직관적 이해에 대해서 제 사례를 굳이 밝히자면요.
사실 저도 인터넷에서 짧은 사진으로 이 문제를 접한 적이 있는데요.
일단 처음엔 직관적으로 이해가 안 되더라고요.
그랬는데 문 3개만 있을 때는 직관적으로 이해가 안 되었다가 한 문 100만개를 두고 99만 9998개를 열어주고 고르라고 하는 걸 상상해 보니까 당연히 바꾸는 게 이득이더라고요.
문을 열어준 거부터 가 확률을 떠먹여 주는 것
그런 점에서 우리가 어떤 일을 계획하고 실행하는데 있어서도 점점 확률을 높여가는 계획을 짜는 것도 가능하겠다는 생각이 들었어요. 너무 망상적인가..
박**(2018****34)11월 5일 오후 1:16
정답이 아닌 문 하나를 열어 주는 것이 처음에 열어 준 다음에 선택했다면 확률은 1/2이겠지만
선택한 다음에 선택한 문을 제외한 것에서 정답이 아닌 문을 열어 준 것이기 때문에 이런 결과가 나온다고 생각합니다. 수학적으로 보면 재형님 설명과 똑같이 되네요
객관식 문제를 풀 때도 하나를 우선 찍고 다른 보기들이 틀렸다는 것을 증명한 뒤 답을 바꾸면 정답률이 올라갈까요?
하지만 어림도 없죠
조**(2018****77)11월 5일 오후 1:38
이 예시 덕분에 베이즈 정리의 이해가 쉬워졌네요!
몬티 홀 문제를 어릴 때 처음 접해보고 충격을 받았던 기억이 생생합니다. 그때의 상식으로는 참가자가 당첨될 문을 모르고 있기 때문에 바꾸어도 확률이 1/2로 같아야 한다고 생각했는데, 그게 아니었습니다. 확률을 구하기 위해선 역시 경우의 수나 조건을 정확히 따져 보는 게 필수인 것 같습니다.
최**(2018****61)11월 5일 오후 1:39
몬티홀 문제 굉장히 유명하죠. 전 이렇게 생각했습니다.
'선택하지 않은 문들 중 염소가 있는 문 하나를 공개해주겠다. 처음 선택을 바꿀 것인가?' 대신
'선택을 바꾼다면 처음에 선택하지 않은 두 문 뒤에 있는 모든 물건들을 주겠다. 처음 선택을 바꿀 것인가?'
라고 생각한다면 확률 계산을 할 필요 없이 '문을 두개 고른다'는 생각에 쉽게 선택을 바꿀 수 있겠죠.
사실 두 문장에서 차를 얻을 확률은 똑같고 후자는 염소 하나가 추가된다는 메리트밖에 없는데 말이에요.
이**(2013****98)11월 6일 오전 00:03
우선 감사합니다 교수님
김** 박** // 맞습니다. 문을 열어주는 행위가 오답을 없애주는 것, 확률을 줄여주는 것입니다!
조** // 맞습니다! 앞에 있는 숨겨진 조건, 여기선 '참가자가 고르지 않은 문 중에' 진행자가 문을 열어 오답을 보여주는 것. 이것이 키포인트였던 것이죠~
최** // 정말 생각지도 못한 발상인데, 그 말이 확 와닿네요. 엄청 직관적이에요. 진행자가 끼어든 거지만 ,결론적으로는 두 문을 모두 열 기회!를 얻는거죠. 똑똑하십니다.
토론 내용 : 유명한 문제인 몬티 홀 문제와 조건부확률, 베이즈 정리의 연관성에 대한 토론. 정말 잘 알려진 문제이다 보니 여러 가지 풀이법이 나와 ‘저렇게도 증명이 되는구나.’라는 생각이 들었다.
8. 알파고 제로 (AlphaGo Zero), 알파 제로 (Alpha Zero)[ 에 대하여 들어보셨나요? 여러분이 알고있는 알파고는 지금은 알파고 리 (AlphaGo Lee) 라고 부릅니다^^
알파 제로 (Alpha Zero)[ 에 대하여 들어보셨나요? 여러분이 알고있는 알파고는 지금은 알파고 리 (AlphaGo Lee) 라고 부릅니다^^
https://ko.wikipedia.org/wiki/%EC%95%8C%ED%8C%8C%EA%B3%A0#%EC%95%8C%ED%8C%8C_%EC%A0%9C%EB%A1%9C_(Alpha_Zero)
알파고 판 (AlphaGo Fan)
176개의 GPU가 사용된 분산 버전이다. 2015년 판 후이 2단과 대국에서 승리하였다. 당시에는 '버전12'로 알려졌다.
알파고 리 (AlphaGo Lee)
48개의 TPU가 사용된 분산 버전이다. 2016년 3월 이세돌 9단과 대국에서 승리하였다.
대국 당시에는 알파고 판에서 기계학습이 개선된 수준의 '버전18'이라는 정도만 알려졌었다. 하지만 2016년 5월 구글 I/O(개발자회의) 2016 컨퍼런스에서 구글은 자체 개발한 애플리케이션 집적회로(ASIC)인 TPU(Tensor Processing Unit)를 처음 소개하면서 이세돌 9단과 대국한 알파고는 TPU가 사용되었다고 설명했다.
알파고 마스터 (AlphaGo Master)
4개의 TPU가 사용된 단일 버전이다. 2017년 초 프로 바둑기사와 온라인 대국에서 60연승을 하였고, 같은 해 5월 커제 9단과의 대결에서도 승리하였다.
2세대 TPU 모듈 1개가 탑재된 '1대의 TPU 머신'으로 구동되는 알파고 마스터는 커제 9단과 대국 이전이었던 2017년 5월 17일 구글 I/O 2017 컨퍼런스에서 공개되었다. 여기에 사용된 TPU 모듈은 연산성능 45TFLOPS(테라플룹스, 1초에 45조번의 연산처리)짜리 TPU 4개로 구성되어 180TFLOPS 성능을 내며, 1개의 모듈은 64기가바이트(GB) 메모리 대역폭을 지원한다. 구글은 TPU의 연산 성능은 당시의 최신 CPU보다 30~80배 높다고 설명하였다.
단일 버전인 알파고 마스터의 연산 능력은 분산 버전의 10% 수준이지만, 주 기능을 인공지능 연산과 예측에만 특화해 기계학습(machine learning) 알고리즘과 텐서플로(TensorFlow), 프레임워크(framework) 구동에 최적화되었다. 기존의 알파고가 학습한 내용을 토대로 추론했다면 알파고 마스터는 추론과 동시에 학습할 수 있고, 학습에 필요한 시간이 기존의 3분의1로 단축되었다. 또한 머신의 물리적인 부피가 줄어들면서 에너지 효율은 10배 가량 향상되었다.[12]
알파고 제로 (AlphaGo Zero)
4개의 TPU가 사용된 단일 버전으로 알파고의 최종 버전이다. 2017년 10월 19일 과학 학술지 네이처에 ‘인간 지식 없이 바둑을 마스터하기(Mastering the game of Go without human knowledge)’라는 제목의 논문 발표를 통해 소개되었다.
알파고 제로는 인간의 기보에 의존하는 지도학습 없이 바둑 규칙만으로 스스로 학습하며 기력을 향상시킨다. 학습 36시간 만에 알파고 리의 수준을 능가하였고, 72시간 만에 알파고 리와 대국에서 100승 하는 동안 패하지 않았으며, 40일 후 알파고 마스터와 대국에서는 89승 11패를 기록하였다. 이 기간 동안 알파고 제로는 2900만 번의 자가 대국을 진행하며 학습하였다. 빅데이터 학습이 필요없는 인공지능의 등장은 바둑과 달리 빅데이터 확보가 어려워 인공지능을 활용하기 어려웠던 분야에 해결책을 제시했다는 점에서 의미가 있다.
알파 제로 (Alpha Zero)
하나의 알고리즘으로 바둑, 체스, 쇼기 등의 보드게임에 적용되는 범용 인공지능이다. 2018년 12월 7일 ‘자가학습을 통해 체스, 쇼기, 바둑을 마스터할 수 있는 범용 강화학습 알고리즘(A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play)’이라는 제목의 논문을 과학 학술지 사이언스에 발표했다.[13]
알파고 제로와 마찬가지로 빅데이터 학습이 필요 없을 뿐만 아니라, 점점 강해지는 자신과의 게임을 반복하면서 스스로 빅데이터를 구축한다. 2016년 쇼기 대회에서 우승한 AI '엘모(Elmo)'와의 대결에서 승률에서 앞서기까지 2시간, 2017년 체스 챔피언을 차지한 AI '스톡피시(Stockfish)‘는 4시간, 알파고 제로는 30시간이 걸렸다.[14] 데미스 허사비스 CEO는 “현실 세계의 문제를 푸는 인공지능을 만들고자 하는 딥마인드의 최종 목표에 다가서는 중요한 여정”이라고 밝혔다.
최**(2018****61)11월 12일 오후 10:13
자가 학습이 가능하고, 때문에 빅데이터 학습이 필요없는 AI라는 점이 알파 시리즈가 가진 놀라운 능력이라는 내용이네요. '모든 분야(빅데이터 확보가 어려운 분야 포함)에서 AI가 활약할 수 있다'는 가능성을 제시하고 있으니까요.
김**(2017****03)11월 12일 오후 11:45
강화학습을 통해서 학습 시킨 것으로 알고 있습니다. 수집한 데이터로만 학습을 진행하는 것이 아니라, 실제로 게임(시뮬레이션)을 하면서 데이터를 스스로 습득하여 학습하는 방식입니다. 강화학습은 행동을 선택하는 정책함수를 반복되는 시뮬레이션을 통하여 학습하여 reward를 최대화 하는 방식으로 학습합니다.
유**(2015****74)11월 13일 오후 9:53
http://www.hani.co.kr/arti/science/future/915324.html
최근 스타크래프트2 에서 알파스타가 최고랭크에 올랐다는 기사입니다.
바둑뿐만 아니라 더 많은 분야에서 인공지능이 인간을 뛰어넘고 있다는 것이 놀라운 것 같습니다
토론 내용 : 알파고가 어디까지 발전했는지, 그것이 얼마나 놀라운 일이며 앞으로는 어떻게 더 발전할 것인지에 대해 새로 알게 되었다.
9. [News] “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.
[News] “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.
작성자 : 이상구(LEE SANGGU)작성일 : 11월 10일 오후 6:07조회수 : 16
[News] 아비나시 부사장은 “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.
"창업이 곧 직업훈련…'기업가 정신' 갖춰야만 디지털시대 생존"
입력2019.11.07 14:44수정2019.11.08 01:51지면A6
디지털 전환 시대에 직업인으로 살아남기 위한 해법은 기업가 정신이라는 전문가들의 조언이 이어졌다. 직원 개개인이 1인기업으로 설 수 있을 만큼 역량을 갖춰야 4차 산업혁명이라는 거대한 흐름에 대응할 수 있다는 의미다. 전문가들은 또 현재 한국은 대학 입학 경쟁에 매몰돼 직업교육을 ‘이류’로 취급하는데, 청소년기부터 기업가 정신을 갖출 수 있도록 직업교육을 강화해야 한다고 지적했다.
“기업가 정신 갖춰야 직장에서 생존”
아비나시 BM 에지인포시스 기술서비스 부사장은 7일 서울 광장동 그랜드워커힐호텔에서 열린 ‘글로벌 인재포럼 2019’의 ‘디지털 전환 시대, 재교육훈련의 혁신방안’ 세션 발표자로 나서 “노동자의 디지털 전환 적응은 생존의 문제”라고 강조했다. 디지털 전환은 정보기술(IT) 발달로 사람과의 연결은 물론, 사물과 사물 간 연결이 가능해지고 급격한 자동화가 이뤄지는 현상을 말한다. 아비나시 부사장은 “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.
김**(2014****41)11월 10일 오후 9:15
그런데 이건 재교육이나 정신무장으로만 해결될지는 좀 궁금해지네요.
저번에 창업 과목을 들을 기회가 있었는데요. 아무나 창업을 하는 건 아니고
극히 훈련된 인재가 도전해야한다. 그래서 교육과정을 늘리고 장기적으로 교육이 가능하도록 지원해야한다. 그런 취지로 수업을 들었던 기억이 있는데
그런 창업과정도 재교육의 중간다리에 비유되고 있고
또 4차 산업 시대에서 재교육을 통해서 새로운 일자리를 가진다면
인공지능에 대한 교육을 받아야할텐데 점점 시대가 갈수록 재교육을 받을때 가져가야 할 것이 늘어나는 것 같아요.
만약 재교육으로 이 상황을 극복해보자.
그렇게 결정된다면 인생의 반은 정말 배우는데 쓰는 나라가 되야할지도
이상구(LEE SANGGU)11월 10일 오후 9:45
한 나라 인재들의 대부분이 앙뜨레쁘레너슆 이 아니라 자격시험 에 매달 린 다면, 그런 나라는 희망이 없답니다. 동료중 한 사람이 창업에 성공하면 ... 수많은 동료와 후배들이 능력을 발휘할 공간을 만들어 낸답니다.
여러분 선배 중 창업에 성공한 많은 개척자들이 있습니다. 원하면 Job Korea 창업주 인 김화수 대표 에게 여러분 을 대상으로 강의를 한번 해 달라고 부탁할까요?
김**(2014****41)11월 10일 오후 10:30
교수님 말씀을 또 듣고 보니 저를 포함해서 많은 사람들이 축소지향 안전 지향으로 가고 있다는 생각도 드네요.
기업가정신들 갖는데 동료들의 성공사례가 중요하다는 말씀을 듣고 보니 이런 점을 고려하지 않았다는 것을 알게 되었습니다.
이상구(LEE SANGGU)11월 11일 오전 2:59
Good. 맞습니다. 각국의 10대 명문대의 한 과에서 똑똑한 한 두 명씩 만, 남들 4.2 학점 을 목표로 할때 ... 3.2을 목표로 하고 대신 ... 사회에 어떤 새로운 서비스가 필요할지를 한 학기 내내 생각하고 동료들과 충분히 토론하면서 찾아가면 , ... 그중 대부분은 그 후 무엇을 해도 성공 할 것 이랍니다. 미국 톱 대학들이 본교 출신 학부생 중 top
10% 외에는 본교 대학원 에 오지 말라고 하고, 사회에 나가서 큰기여를 하는 인재로 성장하라고 가르치는 것 도 그런 이유입니다.
성대도 학생성공 장학금으로 그런 학생들의 시도를 격려 하고 있습니다.
최**(2018****61)11월 11일 오후 4:52
'기술과 사람을 잇는 법'을 알기 위해서는 역시 컴퓨터와 대화할 수 있는 능력을 길러야겠죠. 그것을 위해서는 기본적인 수학, 코딩 능력이 필요하고요.
기업가 정신을 지닌 사람들이 많이 배출되더라도, 그들과 함께할 동료들의 능력이 부족하면 디지털 시대에 큰 성과를 내긴 힘들 것입니다.
직업교육 강화와 더불어 앞서 언급한 기초적인 수학, 코딩 수업도 필수적으로 실시해야 한다는 점도 강조해주었으면 좋겠네요.
우리나라는 특히 고등학교에서의 수학 교육과정이 점점 퇴보하고 있으니까요...
유**(2015****74)11월 13일 오후 10:12
“기업가 정신 갖춰야 직장에서 생존” 이라는 말에서 기업가 정신이 반드시 창업을 해야한다는 의미라기보다는 '기술과 사람을 잇는 법' 이라는 말처럼 정말 사람들에게 필요한 것이 무엇인지를 파악하고 기술을 이해하여 디지털시대에 효과적으로 일을 할 수 있는 사람이 되어야한다는 의미로 생각됩니다.
우리나라는 대기업의 영향력이 크고 시장이 다른 나라에 비해 작은 편이라 환경이 창업으로 성공하는 것이 쉽지 않지만 시대와 기술에 대한 지식과 통찰력이 있다면 창업은 능력을 발휘하기 가장 좋은 방법이라고 생각합니다.
그러한 인재를 성장시키기 위해서는 시대의 흐름에 맞는 교육시스템역시 필요하다고 생각됩니다. 코딩과 인공지능에 대한 교육도 그 일부가 될 수 있을 것 같습니다.
토론 내용 : 현재 존재하는 일자리를 앞으로는 로봇이 많이 대체하게 될 것인데 도태되지 않기 위해서는 무엇이 필요한가에 대한 어느 정도 해답을 얻었다.
10. [매일 경제] "엑스레이 영상 판독도 인간 의사보다 AI가 더 잘해“
AI가 의료진단에 크게 활약할 날도 얼마남지 않았네요.
매일경제
"엑스레이 영상 판독도 인간 의사보다 AI가 더 잘해"
한경우 입력 2019.11.10. 14:45 댓글 87개
https://news.v.daum.net/v/20191110144500052?fbclid=IwAR3WVvz1_H4j97_-F8C8yG7ZA4O4uO1rhRzMZcTsjCnW2pbnO5BbsjM90l4
인공지능(AI)이 흉부 엑스레이 영상을 판독하는 민감도가 인간 의사보다 더 높다는 연구 결과가 발표됐다.
의료계에 따르면 서울대병원 영상의학과 박창민·황의진 교수는 지난 2017년 1~3월 응급실을 방문한 환자 1135명을 대상으로 AI진단시스템의 흉부 X선 영상 판독능력을 검증한 결과 당직 영상의학과 의사의 판독 민감도는 66%에 불과했지만, AI 진단시스템의 민감도는 82~89%에 달했다.
당직의사가 AI진단시스템 분석결과를 참고해 진단했을 때는 판독 민감도가 더 향상된 것으로 나타났다.
영상을 판독하는 시간도 인간 의사는 88분(중앙값)이 소요됐고, 추가 검사나 치료가 필요한 이상 소견이 있는 여상은 114분(중앙값)이 소요됐다.
응급실에서 인공지능 진단시스템을 활용한다면, 판독오류와 소요시간을 줄임으로써 진료지연을 개선할 수 있을 것이라며 실제 진료현장에서 AI진단시스템 활용 가능성이 이번 실험을 통해 입증됐다고 병원 측은 강조했다.
앞서 AI를 활용한 진단보조도구가 성능이 우수하다는 것은 다른 연구에서 몇 차례 보고된 바 있지만, 대부분의 연구가 실험적 데이터로만 성능을 확인해 실제 진료 현장에도 사용가능한지는 미지수였다.
박창민 교수는 “이번 연구는 인공지능이 실제 환자진료에 충분히 활용될 수 있음을 보여주는 하나의 이정표가 될 것”이라며 “추후 보다 고도화된 인공지능 시스템 개발, 성능검증과 더불어 인공지능 활용을 극대화하는 방안에 대한 연구를 이어갈 것”이라 말했다.
이번 연구는 서울대학교병원과 서울시 산학연 협력사업의 지원으로 시행됐으며 관련 분야 최고권위 학술지인 ‘방사선학(Radiology)’ 최신호에 게재됐다.
[디지털뉴스국 한경우 기자]
본문
1. AI가 인간 의사보다 엑스레이 영상 판독을 더 잘한다는 연구 결과가 나왔다.
2. 이는 그동안의 연구가 실험적 데이터로만 AI의 성능을 확인할 수 있었으나, 이번에는 실제 진료 현장에서도 그 성능을 발휘했다는 점에서 특히 중요하다.
3. 이번 연구는 의료 분야에서 더 고도화된 인공지능 개발, 더 많은 인공지능 도입 등을 긍정적으로 검토할 수 있도록 하였다.
김**(2014****21)11월 11일 오전 3:08
실제 시각적 정보를 인식하는 능력은 이제 AI가 사람보다 뛰어나다고 합니다. 저는 이런 AI기술을 성능적인 부분만 고려한다면 의료분야에 적용하는데에 찬성합니다. 하지만 환자들이 이 방식에 대해 낯설어하기 때문에 실제 사례에 적용하기는 시간이 걸릴 것 같습니다. 위 기사처럼 연구를 계속 진행하여 성능을 계속 검증해준다면 AI로 진료를 조만간 받을 수 있을 것 같습니다.
이상구(LEE SANGGU)11월 11일 오전 8:19
대학병원에서 처방전 나옴과 동시에 로봇 약사가, 약 조제하여, 봉투로 만들어, 주차장 입구에서 픽업하여 가게 하는 것은 어떨까요? 이것은 이미 99.9% 안전성 확보되어 시범운영 마쳤다고합니다.
최**(2018****61)11월 12일 오후 10:48
의사들의 기술 도입 반대도 고려해 볼 만한 문제입니다. 우버나 타다 같은 경우도 기존 택시 업계의 반발로 인해 국내에서 기소되는 경우가 실제로 있었죠. 하지만 의료 산업은 사람의 목숨과도 직결되는 문제인 만큼, 이러한 기술의 실용성이 입증된다면 본인의 손해를 감수하더라도(의사 수가 줄거나 입지가 줄어들더라도) 적극적으로 수용해야 한다고 생각합니다.
이**(LEE SANGGU)11월 13일 오전 5:29
그래서 성대 의대 교수들도 긴장 하고 있습니다. 이에 대비하기위해 삼성서울병원 진단방사선과 교수들이 ... 나에게 ... 도대체 인공지능 왓슨이 ...어떤 원리로 ... 판독을 보통 의사 보다 잘 하는지 이유를 설명해달라고 ...talk 에 초대하고 싶다고 ... 의무부총장님이 어제 내게 부탁을 하셨는데 ... 최준오 군이라면 ... 어떤 얘기를 성대 의대 교수님들에게 해 주고 싶으신가요?
김**(2012****59)11월 13일 오후 2:43
이 시스템은 의사들의 판단을 토대로 가장 최적의 진단을 하는 그런 시스템인 것 같습니다. 즉 분류 시스템. 제가 들을 바로는 몇만장의 데이터셋을 의사들이 없는 시간 쪼개가며 라벨링을 한 후 트레이닝 셋을 만들어내는데 이게 보통 시간 걸리는 일이 아니라고 합니다. 라벨링을 할 때 피곤해서 잘못하거나 실수하는 경우도 있을 것 같습니다. 그래서 이 시스템은 시간과 인력의 문제라고 생각됩니다.
최**(2018****61)11월 13일 오후 10:09
저는 엑스레이 영상 판독에 대한 지식도, 인공지능 왓슨이 어떤 원리로 작동하는지도 잘 모릅니다. 제가 하고 싶은, 할 수 있는 말은 오직 의사들과 AI 의사를 개발하는 사람들의 목적은 결국 같다는 것입니다. '인류에게 발생할 위험이 있는 질병을 예방하고, 이미 존재하는 질병을 퇴치하겠다'는 것이죠. 공통의 목적을 가진 사람끼리 해야 할 일은 명확합니다. 서로 협력하는 거에요. 의사들은 AI 개발자에게 필요한 의료 지식들(흉부 엑스레이 사진 판독법 등)을 전달하고, AI 개발자들은 받은 의료 지식들로 개발한 AI가 의사들에게 도움이 되도록 하고(뇌보다 빠른 처리속도와 지치지 않는다는 점을 통해 의사들보다 빠르게 답을 내놓을 수 있음. 때문에 의사들은 아직 AI가 개발되지 않은 다른 의료 작업에 집중력을 쏟기가 용이해짐.)...
토론
AI가 의료계에 도입이 된다면, 단순 반복 작업(분류 시스템, 즉 라벨링 등)에서도 큰 도움이 된다. 인간이 직접 하면 시간이 오래 걸리고 피로 때문에 실수도 할 수 있는데
AI는 그렇지 않기 때문이다. (김** 님의 의견) - 영상 판독보다는 덜 복잡한 알고리즘을 사용(따라서 에러 발생률이 낮음)하면서 AI가 의료계에 쓰일 수 있는 방안을 제
시해주셨다.
환자의 입장에서는 AI 의사가 믿음직스럽지 못할 수 있다. (김명준 님의 의견) - 나 역시 '보는 것'도 심리적인 안정 면에서는 큰 도움을 준다고 생각한다. 병원에 갔는데
의사가 없거나 로봇이 떡하니 앉아있으면 꽤나 당황스럽고 불안할 것 같다.
이미 99.9% 안정성이 확보되어 있고 시범 운영까지 마친 로봇 약사의 도입은 어떨까요? (이상구 교수님의 의견), 위 기사처럼 연구를 계속 진행하여 성능이 더 확실하게
검증된다면 AI 진료를 받을 수 있을 것이다. (김명준 님의 의견) - 결국 AI 진료에 대한 믿음을 환자들에게 심어주려면, 엄격한 안정성 검증이 반드시 필요하다.
AI가 의료계에 도입된다면 반복 작업을 거의 없앰으로써 의사가 부담해야 할 일이 크게 줄어들고 따라서 의료 서비스의 질이 상당히 오를 것으로 기대된다. 그러나 AI는
아직 환자에게 불신감을 줄 수 있기 때문에 안정성에 대한 더 많은 검증이 필요할 것이다. 또 의사들이 본인의 입지가 줄어들 수 있다는 점을 이유로 AI 도입을 반대할 수
있다. 실제로 한국에서는 우버나 타다가 택시업계들에 의해 기소되는 경우도 있었다. 이러한 문제의 해결법은 의사들이 자신들의 본분을 잊지 않고, 의료 AI 개발에 적극
적으로 협력하는 수 밖에는 없다고 생각한다.
토론 요약: AI가 실제 노동현장(의료계)에 적용된 사례에 대한 기사. 알파고 때만 해도 멀어보이던 AI가 우리 사회의 깊은 곳까지 침투하는 게 얼마 남지 않았다는 생각이 들었다.
11. 결합확률분포란?
박**(2018****34)11월 15일 오전 9:19
그럼 똑같은 방식으로 이산확률변수를 더 늘리면 차원이 더 늘어난 확률분포가 되는 건가요?
최**(2018****61)11월 15일 오전 9:24
아무래도 그렇게 되겠죠? 개인적으로 일변수 함수만 다루다가 다변수 함수를 배우게 됐을 때보다 개념을 이해하기 훨씬 쉬운 것 같아요
이상구(LEE SANGGU)11월 15일 오후 2:13
Good^^ 아래 자료를 보시면 http://ocw.snu.ac.kr/sites/default/files/NOTE/1789.pdf 에서 Joint cdf 부분 보시면, 궁금해 하시는 차원이 더 늘어난 경우에 대한 답을 확인 하실 수 있을 것입니다^^
토론 내용 : 새로 배운 결합 확률 분포에 대해 토론하였다. 토론 내용은 짧지만 내가 이해한 것이 맞았다는 점이 뿌듯했다.
12. 신경망의 원리와 데이터 분석에서의 행렬의 중요성
김**(2017****03)11월 22일 오전 9:09
데이터를 병렬화하여 한번에 연산할 수 있기 때문에 행렬을 이용합니다!
activation function은 output을 비선형적으로 변환시켜주는 함수입니다.
각각의 layer들의 아웃풋과 activation function은 다른 개념입니다.
김**(2012****59)11월 22일 오전 9:10
행렬 계산을 할 필요는 없지만 layer끼리 연산을 시키기위해 행렬계산이 어떤식으로 이루어 지는지, 어떻게 연결지어야 할지 아는것이 중요하다고 봅니다.
이**(2013****98)11월 22일 오전 9:13
각각의 component가 원인인 input vector, 결과인 output vector 사이의 관계는, 각 벡터 공간에서 벡터 공간으로의 onto인 함수라고 할 수 있겠습니다.
그것이 바로 메트릭스인 것이죠.
최**(2014****53)11월 22일 오전 9:14
SVD나 고윳값분해 같은 차원 축소로 출력된 데이터를 효율적으로 사용할 수 있습니다.
김**(2014****41)11월 22일 오전 9:17
행렬 계산 때 간단하게 다루는 법을 알게 되었다.
유**(2015****74)11월 22일 오전 10:02
input과 output을 연결하는 함수를 행렬의 형태로 표현하고 계산함으로서 행렬에서의 decomposition과 계산을 사용할 수 있게되고
많은 데이터를 컴퓨터가 다룰 수 있는 사이즈의 데이터로 바꿀 수 있기때문에 데이터 분석에서 행렬이 필요한 것이라고 생각합니다
민**(2018****81)11월 22일 오전 10:56
데이터의 사이즈를 처리하는것과 별개로 데이터를 수집하는 시간자체가 컴퓨터의 빠른속도에도 불구하고 상당히 걸릴것이라고 생각합니다. 이런 문제점을 해결할 방안은 있을까요?
김**(2017****03)11월 22일 오전 11:04
비슷한 연구나 프로젝트가 진행이 되었던 경우에는 보통 이미 제공이되는 데이터를 가지고 학습을 진행합니다.
만약 비슷한 데이터셋이 없거나 데이터셋이 빈약한 경우에는 직접 데이터를 수집해야하는 경우도 생기는데
데이터에 labeling을 사람이 직접 하는 경우에는 많은 시간과 노력이 필요합니다.
이러한 이유 때문에 사람이 직접 labeling을 할 필요 없이 데이터 그 자체만으로 학습을 진행하는 unsupervised learning이나
label이 있는 데이터와 없는 데이터를 같이 쓰는 semi-supervised learning
Task에 필요한 label이 아닌 다른 label을 가지고 학습을 진행하는 weakly supervised learning 등이 있습니다.
토론 내용: 김**님 덕분에 잘못 알고 있었던 개념들을 확실히 정립할 수 있었다. 친절하고 자세하게 설명해주셔서 정말 감사했다.
[Final OK by TA] [Finalize][News] "'질문하는 인간'이 인류 미래 열어주죠" 'IT 연구하는 철학자' 이종관 성균관대 교수 by 유**
''질문하는 인간'이 인류 미래 열어주죠'
“인간이 왜 도구를 만들었는지 근본적인 질문을 곱씹어보면 디지털 시대에 필요한 새로운 도구를 만들기 위해 어떠한 질문을 하고 탐구해야 답을 구할 수 있는지 알게 됩니다. 철학적인 사고가 인류의 미래를 열어갑니다.”
‘정보통신을 연구하는 철학자’로 불리는 이종관(사진) 성균관대 철학과 교수는 5일 서울경제와 만나 “질문하는 인간에게 내일이 있다”며 이같이 말했다. 독일에서 박사 학위를 딴 이 교수는 4차 산업혁명의 여파로 벌어지는 사회현상을 철학자의 시선으로 바라보고 연구하는 보기 드문 학자다.
이 교수는 “우리가 사용하는 도구 중에 효용성이 높고 빠르게 퍼져나간 것은 대부분 그 도구를 사용하는 동안 작업에 몰입하게 만든다”며 “도구를 사용하는 동안 도구의 존재 자체를 잊어버리게 하는 것”이라고 설명했다. 그에게 좋은 도구란 ‘보이지 않는 도구’다. 이 교수는 “사용자가 도구 자체가 아니라 과제에 집중할 수 있도록 해야 한다”며 “좋은 망치는 목수의 손에서 사라져 목수가 건축이라는 더 큰 장면에 집중할 수 있도록 만들듯이 컴퓨터 역시 마술처럼 인간의 행위 속으로 녹아 들어가야 한다”고 강조했다.
[출처] https://www.sedaily.com/NewsView/1VQOHDIWG4
유**(2015****74)11월 7일 오후 1:13
호모파베르의 특성을 가지고 도구를 발전시켜온 인간이 다음으로 만들어갈 중요한 도구가 인공지능이 아닌가 생각이 듭니다. 그렇기 때문에 인공지능에 대해 이해하고 그 도구를 보다 효과적으로 사용하기 위한 공부가 모든 사람에게 필요하겠다는 생각을 하게 되었습니다.
이상구(LEE SANGGU)11월 7일 오후 9:22
“4차 산업혁명이라는 물결에서 도전과 창의력을 발휘하기 위해서는 끊임없이 질문을 던져야 한다”
[Final OK by TA] [Finalize][News] “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.by 이상구 교수님, 김**, 최**, 유**, 김**
[News] “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.
작성자 : 이상구(LEE SANGGU)작성일 : 11월 10일 오후 6:07조회수 : 16
[News] 아비나시 부사장은 “한국은 노동자 1만 명당 로봇이 710개로, 세계에서 자동화 속도가 가장 빠른 나라”라며 “단순히 디지털기기를 사용하는 데서 나아가 ‘기술과 사람을 잇는 법’을 아는 인재만 살아남을 수 있다”고 말했다.
유**(2015****74)11월 13일 오후 10:12
“기업가 정신 갖춰야 직장에서 생존” 이라는 말에서 기업가 정신이 반드시 창업을 해야한다는 의미라기보다는 '기술과 사람을 잇는 법' 이라는 말처럼 정말 사람들에게 필요한 것이 무엇인지를 파악하고 기술을 이해하여 디지털시대에 효과적으로 일을 할 수 있는 사람이 되어야한다는 의미로 생각됩니다. 우리나라는 대기업의 영향력이 크고 시장이 다른 나라에 비해 작은 편이라 환경이 창업으로 성공하는 것이 쉽지 않지만 시대와 기술에 대한 지식과 통찰력이 있다면 창업은 능력을 발휘하기 가장 좋은 방법이라고 생각합니다. 그러한 인재를 성장시키기 위해서는 시대의 흐름에 맞는 교육시스템 역시 필요하다고 생각됩니다. 코딩과 인공지능에 대한 교육도 그 일부가 될 수 있을 것 같습니다.
7. Exam1 part5 11,12 문제를 re-finalize 한 것
궁금증에 대한 이상구 교수님의 답변
코드를 이용해 데이터를 불러와 리스트로 만들어 보는 과정
하나하나 데이터를 입력하지 않고, 데이터 파일을 불러와서 리스트로 받는 방식을 사용하니, 더 빠르고 편리하게 데이터를 다룰 수 있었습니다. 많이 이용될 유용한 부분인 것 같다고 느꼈습니다.
8. [Team2]활동- ‘인공 신경망의 학습 과정‘에 대한 글
인경 신경망의 학습 과정에 대한 final
인공 신경망의 학습 과정에 대해 알아볼 때 뉴런과 대응되는 개념이라 인공 신경망도 임계값를 넘겨야 반응이 전달되는 줄 알았는데, 활성화 함수를 거쳐서 출력된 값이 다음으로 전달되는 방식이라는 것을 알게 되었다.
9. [Team2]활동-FC layer에 대한 글쓰기
그에 대한 팀장님의 finalize
FC layer은 모든 input이 각각의 output에 영향을 미치는 구조이지만, Convolutional layer은
convolutional filter 사이즈에 해당하는 local input들만 해당 output에 영향을 미치는 구조라는 것을 그림을 통해 쉽게 이해할 수 있었습니다.
10. [Team2]활동-CNN에 대한 글쓰기
Dropout과 마지막에 softmax를 추가하는 것은 일반적인 CNN의 특징이 아니라는 것과 softmax는 output이 확률값을 가질 수 있게 하는 함수로 각각의 class에 속할 확률을 나타내도록 CNN을 학습시킬 수 있다는 사실을 알게 되었습니다. 또한, Fully Connected layer보다 Convolution layer이 학습에 필요한 연산량과 매개 변수가 적어 많이 사용된다는 것도 알게 되었습니다.
Exam 1 [ 인공지능을 위한 기초수학 ] - 아래 빈칸을 채우거나, 답이 주어진 문제는 유사한 새 문제나 난이도가 더 높은 문제로 바꾸어 풀거나, 코드를 이용하여 풀어서 자신의 파일을 제출하시오. (QnA에 아래 문제들에 대하여 1인당 5문제씩 풀어서, 자신이 푼 것을 공유하고, 팀별로 팀원들이 푼 문제를 Revise 하고, Finalize 해서 Final PBL 보고서에 Final OK 된 것만 제출하시오.)
Part 1. 주요 개념 중 20개를 골라 아는 대로 서술하시오.
[참고] 선형대수 용어 http://matrix.skku.ac.kr/sglee/SampleLecture-3week/defin.htm
미적 용어 http://matrix.skku.ac.kr/Calculus-Map/
http://matrix.skku.ac.kr/math4ai/
기본행렬 : 단위행렬에 기본행 연산을 한 번 적용해서 얻은 행렬을 기본행렬이라 한다.
Trace 대각합 : 행렬 A의 대각선 성분의 합
power method : 정사각행렬의 거듭제곱을 구함으로써 절댓값이 최대인 고유값과 고유 벡터를 구하는 방법.
가역&비가역 : 역행렬이 존재하는 행렬을 가역 행렬이라고 한다.
벡터공간 : 덧셈과 스칼라배에 대하여 닫혀있고, 8가지 성질을 만족하는 집합을 말한다.
행렬의 계수(rank) : 행공간(열공간)의 차원을 말한다.
수반행렬 : 정사각행렬의 여인자를 성분으로 하는 행렬의 전치행렬을 말한다.
정사영 : 벡터를 주어진 부분공간에 수직으로 투영시키는 변환을 말한다.
SVD : 행렬을 두 개의 직교행렬과 대각행렬의 곱으로 분해하는 것을 말한다.
pseudo-inverse : 가역행렬의 역행렬의 개념을 비가역 정사각행렬과 일반행렬로 확장한 것으로 SVD를 이용하여 정의된다.
그래디언트 : f(x, y)의 편도함수를 벡터로 가지는 벡터함수
중위수 : 표본을 나열했을 때 중간 위치의 표본값
4분위수 : 표본을 나열했을 때 표본을 4등분하는 위치에 있는 표본값들
표본분산 : 표본과 표본평균의 차이의 제곱의 평균
표본표준편차 : 표본분산의 제곱근
Boxplot : 정상적인 범위를 벗어난 값들은 제외하고, 나머지 값들을 4분위한 plot
순열과 조합 : 서로 다른 물건들 중 몇 개를 골라 순서를 주어 나열한 경우 순열, 순서없이 나열한 경우 조합
이산확률분포 : 이산확률변수의 확률분포(베르누이, 이항, 포아송 등)
연속확률분포 : 연속확률변수의 확률분포(균둥, 정규, 지수 등)
중심극한정리 : 어떤 분포의 모집단이라도 표본의 수가 많으면 표본집단은 정규본포를 따른다.
공분산과 상관계수 : 확률변수가 2개 이상일 때, 둘 사이의 관계를 표현하는 값
벡터 : 예를 들어 힘, 속도, 가속도 등 방향과 크기를 모두 포함하는 물리량을 벡터(vector)라 하고, 일반적으로 n개 실수의 순서조 (순서쌍) 로 n차원 공간의 벡터를 나타낸다.
벡터공간 : 임의의 집합 V에 두 연산, 덧셈(vector addition,+)과 스칼라 배(scalar multiplication, ㆍ )가 정의되고, 2개의 기본성질 (두 연산에 대하여 닫혀있다-closed ) 과 8개의 연산 성질을 만족하면 (V, +, ㆍ) 가 벡터공간(vector space))을 이룬다고 한다.
일차결합 : 의 한 일차결합(linear combination)이란 적당한 스칼라 가 존재하여 다음을 만족하는 경우를 말한다.
일차독립 : 에 대하여
을 만족하면 U는 일차독립(linearly independent)이라 한다.
일차종속 : U가 일차독립이 아니면 일차종속(linearly dependent)이라 한다. U가 일차종속이면 모두는 영은 아닌 스칼라 (즉,
중 적어도 하나는 영이 아닌) 가 존재하여 다음을 만족한다.
벡터공간의 기저 : 다음을 만족하는 B를 V의 기저(basis)라 한다.
(1) B가 일차독립이다.
(2) 〈 B 〉 = V
벡터공간의 차원 : B가 V의 기저라 할 때 V의 차원(dimension)은 다음과 같이 정의된다.
dim V = | B |
계수 : 행공간(열공간)의 차원을 행렬의 계수(rank)라 한다. 즉
Col(A)
행렬의 고윳값과 고유벡터 : A가 n차의 정사각행렬일 때, 을 만족하는 스칼라
를 A의 고윳값(eigenvalue)이라 하고, Ax =
x 을 만족하는 0 아닌 벡터 x∈
를 고윳값
에 대응하는 A의 고유벡터(eigenvector)라고 한다.
행렬의 대각화 : A가 어떤 대각선행렬과 닮음행렬일 때, 즉 적당한 가역행렬 P 가 존재하여 가 대각선행렬일 때 A를 대각화가능한(diagonalizable) 행렬이라 하며, 이때 행렬 P 를 A 를 대각화하는(diagonalizing) 행렬이라고 한다.
SVD(특이값분해, singular value decomposition), 일반화된 역행렬, 최소제곱해, 선형회귀 : 행렬 A는 로 분해될 수 있다는 이론을 행렬의 특이값분해(SVD) 또는 간단히 행렬 A의 SVD라 부른다.
극한과 수렴, 발산 : 임의의 양수(positive) ε에 대하여, 만일 0 < δ이면 |f (x)- b | < ε 되게 하는 적당한 양수(positive) δ 가 존재하면, x가 a 에 접근할 때 f (x) 는 b 에 수렴(converse)한다고 하고, b를 ( x가 a 에 접근할 때) f (x) 의 극한(limit)이라고 부르며,
라고 쓴다. 수렴하지 않으면 발산(diverse)한다고 한다.
미분계수 : 함수 f (x) 가 a 를 포함하는 어떤 구간에서 정의(well defined)되어 있고, 극한값 이 존재하면 f (x) 는 x= a 에서 미분가능(differentiable)이라고 하며 이 극한값을 f (x) 의 a 에서의 미분계수(differential coefficient)라 부르고 f '( a ) 로 나타낸 다.
부정적분과 적분 : 어떤 구간에서 정의된 함수 f (x ) 에 대하여 이 구간의 모든 x에 관하여 F '(x ) = f (x ) 를 만족 하는 함수 F (x ) 가 존재할 때 F (x ) 를 f (x ) 의 원시함수 또는 부정적분(indefinite integral)이라고 한다. f (x ) 가 주어졌을 때 그 부정적분 F (x ) 를 구하는 것을 f (x ) 를 적분한다고 한다.
미적분학의 기본정리 : f (x )가 [ a, b ]에서 연속이고 F (x ) 를 f (x ) 의 임의의 한 부정적분, F '(x ) = f (x ) 이라 하면 다음식이 성립한다.
다변수 함수 : x, y를 독립적으로 변화하는 두 변수라 하고 z 를 제 3의 변수라 하자. x, y 의 값이 각각 정해지면 여기에 대응하여 z 의 값이 정해질 때 z 를 두 변수 x와 y 의 함수라 하고 이것을 z = f( x, y ) 로 표시한다. 같은 방법으로 더 많은 변수의 함수도 정의할 수 있다. 이와 같이 이변수 이상의 함수를 일반적으로 다변수함수라 한다.
편도함수 : z=f( x, y) 가 x와 y의 함수라 하자. f 의 x에 관한 편도함수는 다음과 같이 정의된다.
연쇄법칙
(1) z=f( x, y) 가 x, y 에 관해서 편미분가능이며 편도함수 가 연속이고, x, y 가 또 다른 변수 t 의 미분가능인 함수이면, z 는 t 에 관해서 미분가능이며 아래와 같다.
(2) z=f(x,y) , y=g(x) 일 때의 연쇄법칙은 아래와 같다.
(3) z=f(x,y) 가 연속인 편도함수를 가지며, 가 편미분가능이면, 아래와 같다.
Taylor 정리 : 다변수 함수 f가 연속인 편도함수를 가지면, 적당한 t∈(0, 1)가 존재하여 다음이 성립한다.
만일 연속인 2계 편도함수를 가지면, 적당한 t∈(0, 1) 가 존재하여 다음이 성립한다.
경사하강법
[단계 1] 초기 근사해 와 허용오차(tolerance) 0 ≤ ε ≪ 1을 준다. k:=1이라 한다.
[단계 2] 를 계산한다. 만일
이면, 알고리즘을 멈춘다.
[단계 3] 다음을 만족하는 를 구한다.
[단계 4] , k:=k+1라 두고 [단계 2]로 이동한다.
김** 님이 part1을 정리한 것을 보고, 작성하는 데에 상당히 많은 노력을 들인 것을 느낄 수 있었습니다. 그리고 정리한 내용에서 QR분해, SVD, 경사하강법의 내용을 다시 확인하며 개념을 다질 수 있어 좋았습니다.
Part 2 를 이용하여 계산하고 자신의 말로 설명하시오.
1. 점
에서 평면
에 이르는 거리
를 구하여라.
① 주어진 문제의 숫자를 바꾸어서, 비슷한 유형의 새로운 문제를 만든다.
② 수학 사이버랩 http://mathlab.knou.ac.kr 의 선형대수 실습실에 제시된 Sage 명령어또는 http://matrix.skku.ac.kr/2014-knou-la/cu04/ch00/le01/index.htm 의 명령어를 이용하여 해당 문제의 빈칸에 실습한 Sage 명령어와 결과를 복사하여 붙여 넣는다.
③ 자신이 풀이한 방법을 자신의 말로 설명하시오. (크롬 브라우저 이용)
□ 풀이
[Sage] v=vector([1, -2, 3])
P= (1, -2, 3) n= (3, 0, 1)
47/5*sqrt(10) |
□ 설명
이 문제를 통해 평면의 법선벡터를 어떻게 찾을 수 있는지를 알 수 있었으며, 그 법선벡터와 위치벡터와의 정사영을 통해평면과 점 사이의 거리를 아주 간단한 공식으로 구할 수 있음을 알 수 있었습니다. 처음에 평면의 방정식과 점P의 숫자를 약간 바꿀 때 평면이 정의되려면, 법선벡터와 지나는 한 점이 있어야 하는데 이를 고려하지 않고, 그냥 d값을 배정하였다. 이런 실수를 확인하고, 다시 문제의 숫자를 제대로 바꾸고 새로 바꾼 문제를 풀면서 평면에 대한 정의, 정사영을 이용한 점과 평면사이의 거리 정의를 확실히 할 수 있었다.
2. 다음 선형연립방정식을 Gauss-Jordan 소거법으로 풀어라.
① 주어진 문제의 변수를 늘리고 숫자를 바꾸어 새로운 문제를 만든다.
② 수학 사이버랩 http://mathlab.knou.ac.kr 의 선형대수 실습실에 제시된 Sage 명령어또는 http://matrix.skku.ac.kr/2014-knou-la/cu04/ch00/le01/index.htm 의 명령어를 이용하여 해당 문제의 빈칸에 실습한 Sage 명령어와 결과를 복사하여 붙여 넣는다.
③ 자신이 풀이한 방법을 자신의 말로 설명하시오. (크롬 브라우저 이용)
□ 풀이
[Sage] A=matrix([[2, 1, 1, -1, 1, 2],
[A : b] = [ 2 1 1 -1 1 2 1] [ 3 -2 1 -2 -2 6 2] [ 1 1 -1 0 -1 1 3] [ 5 -1 2 0 0 -8 4]
RREF([A : b]) = [ 1 0 0 0 -13/33 -29/33 47/33] [ 0 1 0 0 25/33 5/33 1/33] [ 0 0 1 0 15/11 -19/11 -17/11] [ 0 0 0 1 1/3 -16/3 1/3]
x = (47/33, 1/33, -17/11, 1/3, 0, 0) 1 2 3 4 |
□ 설명
기본행 연산을 이해하고 그것을 이용한 가우스 소거법으로 선형 연립 방정식을 풀어 보았다.원래의 첨가행렬을 RREF 꼴로 변환했을 때, 마지막 열에 남은 값들이 그 방정식의 해가 됨을 알 수 있었다.우리는 RREF()가 매우 강력하다고 생각한다.그 이유는 이 함수의 알고리즘이 단순계산의 반복을 통해 행렬을 RREF꼴로 만드는 것이기 때문이다.(컴퓨터가 제일 잘하고 빠르게 할 수 있다.)그렇기 때문에 식의 개수가 많이 늘어나도 컴퓨터가 전혀 부담을 느끼지 않을 것이다.
3. 기본행 연산을 이용하여 다음 행렬의 역행렬을 구하여라.
① 주어진 문제의 숫자를 바꾸고 행렬의 크기를 늘려서 새로운 문제를 만든다.
② 수학 사이버랩 http://mathlab.knou.ac.kr 의 선형대수 실습실에 제시된 Sage 명령어또는 http://matrix.skku.ac.kr/2014-knou-la/cu04/ch00/le01/index.htm 의 명령어를 이용하여 해당 문제의 빈칸에 실습한 Sage 명령어와 결과를 복사하여 붙여 넣는다.
③ 자신이 풀이한 방법을 자신의 말로 설명하시오. (크롬 브라우저 이용)
□ 풀이
[Sage] A=matrix([[1,2,4,8,16],
A = [ 1 2 4 8 16] [ 4 2 1 0 0] [ 0 4 2 1 1] [ 1 1 1 1 1] [ 3 1 0 2 2]
inverse of A = [ 0 5/24 -1/8 1/24 1/24] [ 0 1/24 3/8 -19/24 5/24] [ 0 1/12 -1/4 17/12 -7/12] [ -1/8 -113/192 -3/64 227/192 83/192] [ 1/8 49/192 3/64 -163/192 -19/192]
A*(inverse of A) = [1 0 0 0 0] [0 1 0 0 0] [0 0 1 0 0] [0 0 0 1 0] [0 0 0 0 1]
|
□ 설명
역행렬을 구하는 방법은 매우 많습니다. 프래그램이 지원하는 함수 (inverse)를 이용해도 좋고수반행렬과 행렬식을 이용해 구하는 방법도 있을 겁니다.여기서는 기본행 연산을 이용해서 풀어보자고 했으니, 기존 행렬에 같은 크기의 단위행렬을 첨가해서RREF를 하는 것이 적합해 보입니다. 행렬의 크기가 2 by 2보다 커지면 수반행렬을 이용하여 역행렬을 구하려 한다면 이는 상당히 번거롭기 때문에 단위행렬을 첨가한 후 기본행 연산을 취해 RREF를 구하면 역행렬을 쉽게 구할 수 있다는 사실을 정리할 수 있었다. 또한, 저렇게 해서 구했을 때 역행렬 부분을 submatrix라는 코드를 이용하여 뽑아낼 수 있음을 알고 sage의 편리함을 느낄 수 있었다.
4.
다음 행렬식을 (a) 먼저 손으로 구하고, (b) 문제를 변형하여 새로운 문제를 만든 후, 그 문제에 대하여 Sage로도 구하시오.
① 주어진 문제의 숫자를 바꾸고 행렬의 크기를 늘려서, 새로운 문제를 만든다.
② 수학 사이버랩 http://mathlab.knou.ac.kr 의 선형대수 실습실에 제시된 Sage 명령어또는 http://matrix.skku.ac.kr/2014-knou-la/cu04/ch00/le01/index.htm 의 명령어를 이용하여 해당 문제의 빈칸에 실습한 Sage 명령어와 결과를 복사하여 붙여 넣는다.
③ 자신이 풀이한 방법을 자신의 말로 설명하시오. (크롬 브라우저 이용)
□ 풀이
[Sage]
A=matrix([[1, 0, 1, 0],
-1 29060
|
□ 설명
다음 정의를 이용하여 직접 계산할 수 있다. 그 결과 (1)의 행렬식은 –1이 나왔다.
sage로는 .det()를 이용하여 구할 수 있는데 그 결과가 -1로 똑같이 나왔음을 알 수 있다. 두번째 행렬은 크기를 키우고 값을 변경하여 .det()를 이용하여 행렬식을 구하였다.행렬이 2 by 2보다 크기가 커지면 행렬식을 구하기 위해서 row expansion 혹은 column expansion을 하여 행렬식을 구해야한다. 이는 상당히 번거로운 과정인데 컴퓨터로는 det()만 입력하니 바로 구해주는 모습을 통해 다시금 컴퓨터의 편리함과 코딩 교육의 필요성을 느낄 수 있었다.
5. 교재에서 3차 행렬
의 고유값을 구한 방법과 같은 방법으로, 각자가 만든 새로운 5차 행렬의 5개의 고유값 (중근포함)과 고유벡터를 구하라.
① 수학 사이버랩 http://mathlab.knou.ac.kr 의 선형대수 실습실에 제시된 Sage 명령어또는 http://matrix.skku.ac.kr/2014-knou-la/cu04/ch00/le01/index.htm 의 명령어를 이용하여 해당 문제의 빈칸에 실습한 Sage 명령어와 결과를 복사하여 붙여 넣는다.
② 자신이 풀이한 방법을 자신의 말로 설명하시오. (크롬 브라우저 이용)
□ 풀이
[Sage]
A = random_matrix(ZZ,5,5) print A.eigenvalues print A.eigenvectors_right()
[(-9.98712158392843?, [(1, 0.6239064639062309?, -1.647713755623696?, -11.08666378096841?, 2.097633612426838?)], 1), (-4.899431076369397?, [(1, 0.5996183868664827?, -0.7628276247421724?, -1.271499699281689?, 0.1034756596845080?)], 1), (-1.392492980273141?, [(1, 0.8625406837873508?, -4.294126500456112?, 0.2809589913005920?, 0.10383281534713023?)], 1), (8.63952282028548? - 4.897385436579419?*I, [(1, -1.687930022190563? + 0.3161343085103668?*I, -0.1418618361503092? + 0.1139879012735477?*I, -0.1291012516263231? - 1.947135066362147?*I, -0.2504089486909407? - 0.4697283089407619?*I)], 1), (8.63952282028548? + 4.897385436579419?*I, [(1, -1.687930022190563? - 0.3161343085103668?*I, -0.1418618361503092? - 0.1139879012735477?*I, -0.1291012516263231? + 1.947135066362147?*I, -0.2504089486909407? + 0.4697283089407619?*I)], 1)] |
□ 설명
5차 행렬의 고유값과 고유벡터를 구하기 위해서는 5차 방정식을 풀어야 하기 때문에 프로그램의 도움이 무조건 있어야 된다. sage에 내장된 eigenvaluse과 eigenvalues_right는 정사각행렬의 고유값과 고유벡터와 중복도를 바로 반환해 준다. 행렬의 크기가 커질수록 특성 방정식을 풀어 고유값을 구하고, RREF를 구해서 각 고유값에 대응하는 고유벡터를 구하기는 너무나도 힘들다. 하지만, eigenvectors_right()라는 코드 하나만으로 고유값과 고유벡터, 중복도를 구할 수 있다는 사실은 놀라웠다. 다른 부분에서도 편리하게 정보를 처리하기 위해서 많은 코드를 알아야겠다고 느끼게 되었다.
Part 3. 다음 물음에 답하여라. (각 5점×3=15점)
1. Gauss 소거법과 Gauss-Jordan 소거법에 대하여 아는 대로 설명하시오.
풀이.
기본행 연산은 해집합을 해치지 않음을 이용해서 기존의 참가행렬 [A:b]를 REF 혹은 RREF꼴로 바꾸어 간단하게 해집합을 구하는 방법이다.
2. 벡터의 일차독립성과 span 사이의 관계를 설명하여라.
풀이.
서로가 독립인 벡터들의 일차결합으로 만들어진 해공간을 spannig 된 공간이라고 한다.
3. 기본행 연산에 대하여 아는 대로 설명하시오.
풀이.
다음 3가지를 기본행 연산이라고 한다.
1) 두 행을 교환한다.
2) 한 행에 영이 아닌 상수배를 해서 다른 행에 더한다.
3) 한 행에 영이 아닌 상수배를 한다.
위 3가지의 기본행 연산은 기존의 해영역을 해치지 않는다.
4. 행렬의 대각화를 배우는 이유에 대하여 아는 대로 서술하시오. (5점)
우리가 접하게 되는 선형연립방정식이나 고차다항식 등은 행렬을 통해 Ax=b로 표현이 가능하다. 이는 우리가 다룰 시스템들이 A 행렬의 properties 에 의존함을 의미한다고 생각한다. 고유값, 특이값, 고유벡터 같이 A 행렬을 대각화는 이런 특성들을 훨씬 직관적으로 보여줌에 능하다. 또한 A 행렬의 대각화는 고유값, 특이값으로 이뤄진 대각행렬을 반환한다. 그 중 0이거나 0에 아주 가까운 값들에 대해서 rank reduction을 해줌으로써 행렬 A가 가진 데이터의 크기를 획기적으로 줄일 수 있다.
Gauss 소거법과 Gauss Jordan소거법, 벡터의 일차독립과 span, 기본행 연산, 행렬의 대각화에 대해 다시 한번 써보면서 개념을 정리할 수 있었다. 그리고 최준오 님의 의견을 받아서 '행렬식이 같으므로(고유값도 같다)'라는 내용의 오류를 ‘행렬식이 같고, 또한, 같은 고유값을 가진다‘로 바꾸면서 오개념을 바로잡을 수 있어서 좋았다.
Part 4. 다음에 답하여라. (각 5점×2=10점)
1. 인공지능을 위한 기초수학 강의를 통하여 배우고 깨우친 수학적 내용 중 특히 기억나는 내용을 서술하시오.
사실 저는 기초수학이 상당히 약해서 뭐 하나 새롭지 않은 것이 없었습니다만 제일 기억에 남는 것은 행렬의 대각화입니다. 사실 고차원의 행렬 연산이 실생활에서 주로 사용된다는 것을 들어서는 알고 있었지만 그것을 실제 계산하는 방법은 무엇이냐 막연하게는 연산기의 성능의 향상 혹은 연산 방법의 발전 이렇게 알고 있었지만 그 후자는 솔직하게 와 닿지 않았습니다.
그런데 같은 고윳값을 가진 대각행렬로 행렬을 바꾸면 고차 정방행렬의 거듭제곱 연산도 쉽게 풀 수 있다는 하나의 예시가 제시되자 계산을 용이하게 하는 방법이 이런 종류의 판단의 연속임을 어느 정도 느낌이 생겼습니다. 이 개념을 알게 된 이후로 다른 개념들도 어떤 고민을 하다가 이런 개념을 만들었을 지에 대한 상상을 할 수 있게 되었기 때문에 저에게 처음으로 이런 느낌을 가져다 준 대각화가 가장 기억에 남습니다.
선형대수 파트에서의 SVD와 pseudo inverse가 가장 기억에 남는다. 선형대수학 수업을 처음 배웠을 때는 SVD가 무슨 의미를 가지는지, 고유값이 무엇을 의미하는지 전혀 이해하지 않았고, 그냥 시험 문제를 맞출 수 있는 공부를 진행하였다. 하지만 이 수업을 통해서 SVD를 통해 어떻게 해를 구할 수 있는지 (해가 없다면 최소제곱해), 고유값이 어떤 의미를 가지고 있는지 깨닫게 되었다. 전공 수업에서 robot kinematic을 설명하기 위해 행렬을 만들고 그 역행렬을 구해야 한다. 그 행렬 A가 정사각행렬인 경우 전혀 문제가 되지 않았겠지만 정사각행렬이 아닌 경우에 의 kinematic을 설명하기 위해서는 pseudo inverse의 개념이 필요했었다. 또한 A 행렬의 SVD를 통해 해공간과 영공간에 대해 고민해 보았고, 그에 따른 robot motion에 대한 이해 또한 가능했다. 그래서 위의 2 개념이 가장 기억에 남는다. 두 경험을 통해 느낀 것은 수학은 정말 기초적인 툴인 동시에 가장 효과적인 툴이라는 것이다.
2. Q&A 참여와 PBL 과제를 완성하는 과정에서 배우거나 느낀 점은 무엇인가요?
PBL 보고서 자체가 내가 한학기 동안 학습한 내용의 정수가 다 담겨져 있다는 점에서 매우 혁신적이라고 생각한다. 나는 항상 해당 학기에 전공 공부를 열심히 한다. 그리고 다음 학기가 되면 그 내용이 벌써 가물가물하다. 뭔가 찾을 내용이 생기면 책을 뒤져보거나 정리 노트를 뒤져봐야 할 것이다. 하지만 책은 너무 방대하고 정리 노트는 뭔가 가독성이 떨어진다. 혹은 어디에 뒀는지도 모른다. PBL 보고서는 적어도 내가 배우고 고민했던 내용에 대해서는 이 레포트 파일 하나로 모든 것을 가능하게 한다. 필요할 때 파일을 열고 검색하면 그곳에 내가 공부하면서 생각했던 것들이 모두 정리되어 있다. 심지어 PBL 보고서 백업도 된다.
우선 Q&A 참여를 통해서 느낀 점은 모방이 소통의 시작이 될 수 있다는 점입니다.
실제로 9월 처음으로 토론게시판이 활성화되었을 때는 새로운 아이캠퍼스 활용에 대한 감이 없어 과거에 들었던 과목들을 학습했던 방법대로 과제를 수행하려했다가 크게 실패하고 '시간을 낭비하고 있다'라는 평가를 받았습니다. 그러나 문의게시판에 다양한 글이 축적되고 그것을 단순히 베끼고 생각을 정리하는 것 위주로 게시판을 채워가자 그 뒤에는 나름대로 자신의 의견을 조금은 낼 수 있는 정도에는 이르게 되었습니다.
그래서 저번 발표시간에서도 주장했듯이 앞으로는 아예 학기 초에 예시 글을 문의게시판에다가 보여줘서 베끼게라도 해야 한다고 주장했던 것입니다. PBL과제를 통해서 느끼는 점은 협업이 경험을 더욱 풍부하게 해준다는 것입니다. 실제로 교수님께서는 팀 과제를 내주고 있는데 팀 과제가 있기 전보다는 pbl 보고서에 올려놓을 토론 내용이나 느낀 점에 대한 내용이 더 많아지고 있고 도움을 받고 있기 때문입니다. 이런 점을 두고 보니 아예 학기 초에 학습자 단체 대화 공간 같은 것이 있었으면 어땠을까 라는 생각도 하게 되었습니다.
1개의 댓글
최**(2018****61) 11월 13일 오후 9:54
2번에 대한 답이 매우 공감됩니다. 고 3때까지 이런 방식의 수업을 접해본 적이 없어서 처음에는 글 하나 작성하기도 굉장히 버거웠어요. 제 생각에는 토론 게시판 활성화도 이런 수업을 좀 더 부담 없이 참여할 수 있는 좋은 방법입니다. 수업에서 여러 번 사용하지는 않았었지만 문의게시판보다 훨씬 쉽게 의견을 나누기 좋았거든요. '작성자'와 '답변자'로 나눠지는 것이 아니라 '모두가 토론자'라는 느낌을 줘서 그랬던 것 같습니다.
역시 Q&A 참여와 PBL보고서가 생소했던 것은 모두가 동일했나보다. 다만 김상현님이 제안한 초기부터 학습자 단체 대화방을 만드는 것은 학습자가 많으면 몇 명이 도태되기 쉬울 것 같아 실용성에 의문이 든다.
Part 5. 다음 물음에 답하여라. (단답형, 12문항)
(각 3점×12문항=36점)
1. 다음의 두 벡터 와
의 내적
을 구하여라.
,
답 : |
-22 |
2. 다음 행렬 에 대하여
을 구하여라.
답 : |
9 |
3. 다음은 주어진 선형연립방정식의 해를 계수행렬 의 역행렬을 이용하여 구하는 과정이다. 물음에 답하여라.
풀이. Sage를 이용하여 계수행렬 의 역행렬을 구하면 다음과 같다.
A=matrix([[1, 2, -1, 3], [0, 4, 2, -1], [1, 0, 3, 1], [3, 5, 2, -1]])
print A.inverse()
[ -1/30 -2/5 1/30 1/3]
[ 1/10 1/5 -1/10 0]
[-11/150 3/25 41/150 -1/15]
[ 19/75 1/25 11/75 -2/15]
(질문) 위 선형연립방정식의 해 중 값을
로 나타낼 때,
를 아래에 기입하시오. (단,
와
는 서로소이다)
답 : |
17 |
4. 행렬 에 대하여 기본행 연산
을 적용한 행렬의 2행 성분의 합을 기입하여라.
답 : |
12 |
5. 다음은 세 벡터 ,
,
가 일차독립인지를 판단하는 과정이다. 아래 Sage 코드 부분의 밑줄 친 곳에 들어갈 명령어를 정확하게 기입하여라.
풀이. Sage를 이용하여 세 벡터 ,
,
를 열벡터로 하는 행렬을
라 하고
의 행렬식을 구하면 다음과 같다.
v1=vector([0, -1, 3])
v2=vector([5, 1, -2])
v3=vector([4, -7, 10])
A=column_matrix([v1, v2, v3])
print )
-59
따라서 세 벡터 ,
,
는 일차독립이다.
답 : |
A.det() |
6. 다음은 Sage를 이용하여 행렬 에 대하여 주어진 선형변환
,
이 전사인지 확인하는 과정이다. 아래 Sage 코드 부분의 밑줄 친 곳에 들어갈 명령어를 정확하게 기입하여라.
풀이. 먼저 Sage를 이용하여 선형변환을 정의하자.
U = QQ^2
V = QQ^3
A = matrix(QQ, [[1, 2], [-1, 1], [1, 0]])
T = linear_transformation(U, V, A, side='right') # 선형변환
print T
Vector space morphism represented by the matrix:
[ 1 -1 1]
[ 2 1 0]
Domain: Vector space of dimension 2 over Rational Field
Codomain: Vector space of dimension 3 over Rational Field
이제 선형변환 의 치역을 구해보자.
print # 치역 생성
Vector space of degree 3 and dimension 2 over Rational Field
Basis matrix:
[ 1 0 1/3]
[ 0 1 -2/3]
이므로
는 전사가 아니다.
답 : |
T.image() |
7. 두 선형변환 와
의 표준행렬
와
가 각각 다음과 같이 주어져 있다고 하자. 합성변환
의 표준행렬
의
성분을 기입하여라.
,
풀이. 합성변환 의 표준행렬은
을 만족하므로
의
성분을 구하면 다음과 같다. ...
답 : |
41 |
8. 다음과 같이 주어진 선형연립방정식에 대하여 물음에 답하여라.
풀이. Sage를 이용하여 첨가행렬의 RREF를 구하면 다음과 같다.
A=matrix([[1, 3, 5, -2], [0, 2, -7, 1], [4, 1, -3, 1], [7, 10, 2, 0]])
b=vector([1, -3, 12, 20])
print "RREF([A : b]) ="
print A.augment(b).rref()
RREF([A : b]) =
[ 1 0 0 0 194/65]
[ 0 1 0 0 -3/13]
[ 0 0 1 0 46/65]
[ 0 0 0 1 157/65]
(질문) rank()는 얼마인지 아래에 기입하시오.
답 : |
4 |
9. 아래 주어진 행렬 에 대하여 dim Col(
)
nullity(
)를 구하여라.
풀이. Sage를 이용하여 행렬 의 RREF를 구하면 다음과 같다.
A=matrix([[1, 2, 3, 0, -2, 0, 7, 6], [2, 8, 1, 5, 0, 6, 1, 3],
[0, 1, -4, 3, 2, 1, 2 , 8], [-4, 2, 0, 6, 4, -2, 3, -1],
[-7, 1, 2, 3, 1, 3, 0, 0]])
print A.rref()
[ 1 0 0 0 0 -17/13 1367/676 911/676]
[ 0 1 0 0 0 34/13 -3839/676 -3811/676]
[ 0 0 1 0 0 -15/13 599/676 -981/676]
[ 0 0 0 1 0 -29/13 5611/676 6335/676]
[ 0 0 0 0 1 3/13 -4623/676 -6855/676]
이므로 따라서 dim Col()는 (1) 이고 차원정리에 의해 nullity(
)는 (2) 이다. 따라서 (1)
(2) 는 다음과 같다.
답 : |
8 |
10. 다음 주어진 이차형식을 로 표현할 때, 대칭행렬
의
의 성분
은 얼마인지 아래에 기입하시오.
답 : |
4 |
11. 다음은 행렬 를 대각화시키는 행렬
와 그에 대응하는 대각선행렬
를 구하는 과정이다. 아래 Sage 코드 부분의 밑줄 친 곳에 들어갈 명령어를 정확하게 기입하여라.
풀이. Sage를 이용하여 행렬 의 고유값과 고유벡터를 구하면 다음과 같다.
A=matrix([[4, -1, 0, -1], [-6, -3, 6, -1], [0, -2, 4, -2], [6, 5, -6, 3]])
print A.eigenvectors_right()
[(2, [(1, 1, 2, 1)], 1), (-2, [(0, 1, 0, -1)], 1),
(4, [(1, 0, 1, 0), (0, 1, 1, -1)], 2)]
행렬 의 각각의 고유값에 대한 대수적 중복도와 기하적 중복도가 같으므로 대각화가 가능한 행렬이다. 행렬
를 대각화시키는 행렬
를 구하면 다음과 같다.
x1 = vector([1, 1, 2, 1])
x2 = vector([0, 1, 0, -1])
x3 = vector([1, 0, 1, 0])
x4 = vector([0, 1, 1, -1])
P = column_matrix([x1, x2, x3, x4])
print P
[ 1 0 1 0]
[ 1 1 0 1]
[ 2 0 1 1]
[ 1 -1 0 -1]
그리고 이에 대응하는 대각행렬 는 다음과 같다.
[ 2 0 0 0]
[ 0 -2 0 0]
[ 0 0 4 0]
[ 0 0 0 4]
답 : |
P.inverse()*A*P |
12. 대칭행렬
,
상의 두 벡터
에 대하여
는 상의 새로운 내적이 된다.
,
에 대하여 내적
을 구하여라.
답 : |
4 |
http://matrix.skku.ac.kr/cal-lab/sage-grapher.html , http://matrix.skku.ac.kr/cal-lab/sage-grapher-para.html
Part 6. State or Define.
1. Choose 4 terminology or concept and state its meaning as much as you knows in your words.
① Newton’s Method ② Fundamental Theorem of Calculus ③ Definite Integral ④ Indefinite integral ⑤ Improper Integral (이상적분) ⑥ Integration by parts ⑦ Volume of a solid of revolution ⑧ The Arc Length Formula ⑨ Comparison Theorem for integral ⑩ Volume of a solid that lies between
and
⑪ The method of cylindrical shells
① Newton’s Method
함수의 해를 찾는 numerical methods 중 하나이다. 간단한 다항식의 경우 사람이 직접 인수분해를 통해 해를 찾을 수 있겠지만, 고차항의 경우 사람의 힘만으로는 풀 수가 없다. newton’s methods는 초기값
에서 시작해서 해에 매우 근접한 값을 구해낸다.
점에 접하는 접선을 정의하면
과 같다. 이 접선이 0이 되는 해를
라고 한 뒤,
점을 지나는 접선을 다시 정의한다. 위 가정을 계속 반복하면 특정값에 수렴하는 데 이 값이 원래 식의 해 중 하나가 된다. newton’s Method는 컴퓨터가 함수의 해를 구할 때 사용할 수 있는 강력한 툴 중 하나이다. 그 과정이 간단하고 반복적인 계산을 얼마나 많이 수행하냐에 따라 근의 정확도가 달라지기 때문에 컴퓨터 연산에 아주 최적이라 할 수 있다. 그렇지만 newton’s method도 한계점이 명확하다. 초기값의 위치에 따라 내가 원하는 근이 아닌 다른 근을 찾을 수 있기 때문이다. 이를 방지하기 위해서는 newton’s method의 알고리즘을 이해하고 plot figure와 함께 비교하며 사용할 필요가 있다.
① 미분의 정의
- 구간에 대해 잘 정의되어 있다. (well defined)를 자세히 봄으로써 '미분가능'한지 아닌지를 판단할 수 있게된다.
1. 정의된 구간이 연속 : 극한의 경우 연속이 아니어도 극한값을 정의할 수 있었지만(좌극한, 우극한이 같을 떄), 불연속점에 대해서 미분은 정의할 수 없다.
2. 부드러운 곡선 : 어느 한 점에서 급격한 변화를 보여주면 안된다. 미분값이 여러개를 가져서는 안된다. 예를 들어 다른 기울기를 가진 두 선분이 교차해서 뾰족한 모양의 함수가 있다고 하면, 접점에서의 미분값은 2개의 기울기값을 가질 것이다. 이런 경우, 우리는 미분불가능이라고 한다.
Improper Integral (이상적분)
The symbol is defined by the equation
.
The improper integrals and
are called convergent if the corresponding limit exists; otherwise they are called divergent.
편도함수의 정의와 직관적 이해
내가 이해한대로 요약하자면 이변수함수 f(x,y)의 x에 관한 편도함수는 임의로 y를 y1으로 정한다면 y = y1이라는 평면위에 f(x,y1)의 곡선이 그려지게되고 이 함수의 변화율의 모음을 f(x,y)의 x에 대한 편도함수라고 한다. 이것은 이변수가 아닌 다변수함수까지 확장할 수 있다.
중심극한정리
모집단의 분포유형을 모르더라도 그 모집단의 표본이 개수를 충분히 늘린다면 그 표본집단이 정규분포를 따른다는 정리이다. 이 개념은 기초통계에서 매우 중요할 것 같다. 예를 들어 나이대별 스마트폰 사용시간을 조사한다고 했을 때, 전체 인구의 나이대별 스마트폰 시간을 다 조사할 수는 없을 것이다. 이 때 중심극한정리를 이용하면 표본의 수를 충분히 많이 늘린다면 표본집단이 정규본분를 따름을 이용해 해석할 수 있을 것이다. 물론 중심극한정리가 적용되지 않는 코시분포도 존재하지만 이 정리의 사용 범용성과 효율성이 더 부각된다고 생각한다.
Part 7. Find or Explain or Fill the blanks.
1.Use differential to approximate .
Let
. Set
and
. Since
,
, we have
.
Hence approximately,
. ■
2. (Sage) Sketch the region enclosed by and find its area
f(x)=x-1 g(x)=5-x^2 show(plot(f(x), x, 0, 2) + plot(g(x), x, 0, 2)) print integral( g(x)-f(x), x, 0, 2 ) |
Answer : 22/3 ■
3. Verify the formula
by Sage .
Proof)
=
=
=
Verify the above formula by Sage
var('x, a'); integral(sqrt(a^2-x^2), x) |
1/2*a^2*arcsin(x/sqrt(a^2)) + 1/2*sqrt(a^2 – x^2)*x #
=> RHS= LHS ■
4. Calculate the volume of the solid obtained by rotating the region bounded by curve about the
-axis.
(Sage)
128/7*pi # ■
5. A 8 ft chain weighs 24 lb and hangs from a ceiling. Find the work done in lifting the lower end of the chain to the ceiling so that it is levelled with the upper end.
So the work done raising the chain is (in ft·lb) ■
6. Calculate the total area of A part and B part marked in the graph below. Here and
.
(Sage)
e^2 - 3.22424574744
7. (Exs 7-2-5) Write how you are going to show a formula
.
(Either by hand or Sage)
Sage를 이용하여 공식을 증명하려는 경우는 어떤 과정을 거치는지와 명령어만 서술하면 됩니다.)
1/15*(15*cos(x)^4 - 10*cos(x)^2 + 3)/cos(x)^5 ■
Let , then we have
Therefore,
Ans: 1/15*(15*cos(x)^4 - 10*cos(x)^2 + 3)/cos(x)^5 ■
8. Find the length of the curve from
to
.
Since
implies
,
var('y') f(y) = sqrt(1+4*y^2) print integral(f, y, 0, 1) |
Share
1/2*sqrt(5) + 1/4*arcsinh(2)
Part 8. Prove or Explain .
1. Show using
method.
∀
> 0 [ Find
] Let
If ,
then =
=
=
.
[Side calculation]
. ■
[Side Calculation]
■
2. Show .
▸▹ Proof :
3. Find (You may use Sage in part, but I recommend you to solve it by hand.)
▸▹ Sol :
. ■
4. Verify
by Sage .
Proof) =>
Verify the above formula by Sage
integral(1/(x^3+1), x)
|
1/3*sqrt(3)*arctan(1/3*(2*x - 1)*sqrt(3)) + 1/3*log(x + 1) - 1/6*log(x^2 - x + 1)
=> RHS= LHS ■
2. 이중적분 를 구하여라.
(여기서 영역 는 네점
을 꼭지점으로 갖는 정사각형의 내부이다.)
(풀이)
변수 변환을 이용,
그러면 이므로
■
3. 다음을 구하여라.
(풀이)
■
4. 다음의 삼중적분을 구하여라.
, 여기서
는 밑면을
, 꼭지점을
로 가지는 원뿔의 내부이다.
(풀이) 여기서
■
2. [Project 제안서] Your possible Team Project 제목, 동기, 방법론, 참고문헌 [아이디어와 Draft]
- 팀을 구성하면서 팀장 중심으로 교수님의 조언을 받아 수정/보완/확정됩니다. (본인 전공과 본 강좌를 연계하여 선택하고 좋은 최신의 참고문헌을 찾아서, 후속 문제를 생각하시면 됩니다!)
[Team Project 제안서 (TBA)] - 중간고사의 10점 부분
Team Project Proposal/Final Report (Form)
Action Learning
Basic Math for AI
Prof : Sang-Gu LEE
Due day : 10.23
I-campus HW box (과제함)
Team Number and Team Leader + Members (Tentative):
3팀 : &&**(조장), 김**, 김**
팀원 평가 :
김** B+
김** F
2. [Project 초안]
Team Project Final Report
Action Learning
Basic Math for AI
Prof : Sang-Gu LEE
Due day : 12.11
I-campus HW box (과제함)
Team Number and Team Leader + Members (Tentative):
[Team2]-조장: 김두영, 팀원 : 유대청, 엄@@
Team Project : 인공지능 학습 도구 개발
그리고 지금은 Team2에서 인공지능에 대한 실습 도구를 개발하는 프로젝트를 하고 있습니다. 주성분 분속, 인공 신경망의 학습 과정, FC layer 구성 및 학습, MINST 데이터 Classification, CIFAR-10 데이터 Classification, CNN에 대한 내용을 html로 만들어서 제공하려고 합니다. 각각의 내용을 담은 박스가 있고, 이 박스를 누르면, 개념 설명과 실습 코드를 입력해 놓음으로써 실습 결과를 직접 확인할 수도 있게 구성하였습니다. 여기서 저는 코드 구현에 참여하기에는 실력이 부족해 개념을 설명하는 역할을 맡았습니다. (아래 내용들은 팀프로젝트에서 다루는 내용이며, 김두영 님의 조언을 참고하여 작성했습니다.)
1.인공 신경망의 학습 과정
인공 신경망은 기계 학습의 방법 중 하나로 신경계의 기본 단위인 뉴런을 모델화 하여복잡한 연산을 처리할 수 있도록 두뇌의 정보 처리 과정을 모방하여 만든 알고리즘을 뜻한다. 여기서 뉴런에 대응되는 개념은 퍼셉트론으로 퍼셉트론은 입력층, 중간층, 출력층을 가지고 있다. 이 퍼셉트론은 다수의 신호를 입력받아 하나의 신호를 출력하는 구조인데, 입력신호를 받을 때 각 입력 신호에 가중치를 부여한다.(가중치가 클수록 해당 신호가 더 중요하다고 볼 수 있다.)
뉴런에서는 임계값 이상의 자극이 주어져야 감각이 반응하지만, 인공 신경망에서는 입력 신호들에 가중치를 부여한 값이 Sigmoid, ReLU, tanh등의 다양한 활성화 함수를 거쳐서 출력된 값이 다음으로 전달되며 나아가는 방식이다. 이러한 방식에서 좀 더 정확한 출력이 되는 방식을 사람들은 원하고, 그러기 위해서는 어떠한 데이터가 주어졌을 때 그 데이터들에 부여되는 적절한 신경망의 가중치를 찾는 것이다. 이를 위해서 입력값과 정답을 알고 있는 데이터 셋이 필요하다. 이 데이터 셋을 이용하여 인공 신경망은 임의의 가중치로부터 신경망의 출력값과 정답간의 오차를 줄이는 방향으로 가중치를 점차 갱신해나가는 방향으로 학습하게 되는 것이다. 오차를 줄일 때는 역방향으로 나아가며, 계층 간의 각각의 연결이 오차에 영향을 주는 정도에 비례해서 오차를 전달해줄 수 있고, 대표적인 방법으로는 오차 역전파법이 있다. 이 때 오차 역전파법에서 오차를 줄이기 위해서 경사하강법을 이용할 수 있다.
먼저 경사하강법은 어떤 값을 최소화시키기 위해 사용하는 알고리즘으로 함수의 기울기를 구하여 기울기가 낮은 쪽으로 이동시킴으로써 극값에 이룰 때까지 이 과정을 반복하는 방법이다. 의 형식으로 구성되며, d_k는 탐색방향을 의미하는데 함수값이 감소하는 방향이므로 하강방향이라고 한다. 이 때 경사하강법은 탐색방향을
로 택하는 경우이다. 그래디언트의 기하학적인 의미가 어떠한 점에서 가장 가파르게 증가하는 방향이므로 음의 그래디언트를 택한다는 것은 어떤 점에서 가장 가파르게 감소하는 방향으로 하강하겠다는 의미이다. 이러한 하강을 아래의 과정을 반복하며 오차 범위에 들어올 때 까지 하강한다.
1. 초기 근사해와 허용 오차 을 준다.(1보다 매우 작은 값) k:=1이라고 한다.
2. 를 계산한다. 만일
이면, 알고리즘을 멈춘다.
3. 다음을 만족하는 를 구한다.
4. , k:= k+1라 두고 2번으로 이동한다.
오차 역전파법에서도 위와 같은 방식을 사용할 수 있다. 처음의 가중치에 따라서 결과와 원하는 값(정답) 사이에 오차가 발생하게 된다. 이 때 오차를 역으로 전달하는 과정에서 오차가 작아지는 방향으로 나아간다 즉, 위에서 설명한 경사하강법을 사용하여 오차를 줄여나갈 수 있다는 의미이다. 아래의 방법으로 적용할 수 있다.
1. 임의의 초기 자중치(w)를 준 뒤 결과를 계산한다.
2. 계산 결과와 원하는 값 사이의 오차를 구한다.
3. 경사하강법을 이용해 바로 앞의 가중치(w_k+1)를 오차가 작아지는 방향으로 나아간다.
4. 위 과정을 오차가 범위 내로 들어올 때까지 반복한다.
출처 : 이상구 님의 교재 - Math4AI-v63-main.pdf
https://ratsgo.github.io/deep%20learning/2017/05/14/backprop/ - 오차 역전파법
2. MNIST 데이터셋
MNIST 데이터셋은 숫자 0~9까지의 손글씨 이미지의 데이터들로 구성되어있다. 이 데이터 셋은 학습데이터 60,000개, 테스트 데이터 10,000개로 구성 되어 있고, size는 28X28의 크기를 가진다. 이 데이터 셋을 이용하여 인공 신경망을 학습시킴으로써 인공 신경망이 어떤 숫자를 입력했을 때 이를 제대로 인식할 수 있게 한다. 이렇게 제대로 숫자를 인식을 할 수 있게 되는 것은 다음과 같은 과정을 거치며 인공 신경망이 학습을 하기 때문이다.
먼저 화면에 어떤 숫자를 적게 되면, 이 숫자를 나타내는 이미지가 벡터로 변환되어 입력층에 전달되게 된다. 그 후 신경망을 거쳐 얻은 출력층의 신호가 가장 큰 노드의 레이블로 숫자를 판단하게 되는 것이다. 이러한 과정을 통해서 숫자를 인식하는 것인데, 정확도를 높이기 위해서 인공 신경망에 대량의 MNIST 데이터 셋을 입력하게 된다. MNIST 데이터 셋은 정답과 입력값을 가지고 있고, 이를 인공 신경망의 출력값과 비교하며, 오차를 줄여나가는 방식을 통해서 적당한 가중치 값을 설정하게 하는 것이다. 이러한 많은 학습을 통해서 입력한 숫자를 사용자의 의도에 맞는 숫자로 인식할 수 있게 되는 것이다.
출처:
https://goodtogreate.tistory.com/entry/MNIST-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%85%8B%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%86%90%EA%B8%80%EC%94%A8-%EC%9D%B8%EC%8B%9D-Deep-Neural-Network-%EA%B5%AC%ED%98%84
-> MNIST 데이터셋에 관한 내용
3. CIFAR 데이터셋
CIFAR-10데이터 셋은 기계 학습과 컴퓨터 비전(Computer vision) 알고리즘을 훈련하는 데 일반적으로 사용되는 이미지 모음으로 비행기, 자동차, 새, 고양이, 사슴등의 이미지 데이터 셋이다. CIFAR-10의 size는 32X32의 크기를 가지고, CIFAR-10에는 5만개의 학습 이미지와 1만개의 테스트 이미지가 있다. 이 데이터 셋은 기계학습 연구를 위해 가장 널리 사용되는 데이터 셋 중 하나이다.
(컴퓨터 비전은 컴퓨터에서 카메라, 스캐너 등의 시각(vision) 매체를 통해 입력 받은 영상에서 주변 물체와 환경 속성에 대한 이미지를 분석하여 유용한 정보를 생성하는 기술이다. 컴퓨터 또는 로봇에 시각 능력을 부여하여 얼굴, 건물 등 물체를 인식하는 데 응용된다.)
즉, CIFAR-10데이터 셋은 이미지 모음으로 이 데이터 셋을 이용하여 인공 신경망을 학습시킴으로써 얼굴 혹은 사물을 구분하게 만들 수 있는 것이다. 인공 신경망의 학습 과정에서 본 방법처럼 인공 신경망에 데이터를 주고, 오차를 줄여나가며 정확도를 높임으로써 정확한 구별이 가능해질 수 있다.
출처:
https://excelsior-cjh.tistory.com/152 - CIFAR-10 데이터 셋과 CNN
http://solarisailab.com/archives/2325 - 사진 출처와 레이블
http://dongyukang.com/CIFAR100-%ED%95%A9%EC%84%B1%EA%B3%B1-%EC%8B%A0%EA%B2%BD%EB%A7%9D-%ED%95%99%EC%8A%B5/ - CIFAR-10 데이터 셋
4. FC layer 구성 및 학습
FC layer은 Fully Connected layer의 약자로 기존의 인공 신경 지능망에 이용되며, CNN의 layer 중 하나로 이미지를 분류하거나 설명하는 데에 이용되기도 한다.(CNN은 기존의 인공 신경 지능망 앞에 여러 계층의 Convolutional layer들을 붙인 모양이기 때문이다.)
이 FC layer들은 입력층, 중간층, 출력층의 구조를 가지고 있는데, 먼저 FC layer는 전결합 레이어로 1차원 데이터만 입력 받을 수 있기 때문에 입력층에서는 평탄화 작업을 한다. 이 평탄화 작업은 이전 층에서의 데이터를 1차원 벡터로 변환하는 작업을 뜻한다. 그 후 중간층에서는 이미지 분석을 위해 정확한 라벨 예측을 위한 가중치를 적용하는 작업을 한다. 마지막으로 출력층에서는 각 라벨에 대한 최종 확률을 제공하게 된다.
FC layer들은 layer의 모든 input이 각각의 output에 영향을 미치는 구조이다.
출처 : 김** 님의 finalize에 사용된 사진
구글에 neural network dense layer를 검색하면 나오는 사진
https://blog.naver.com/intelliz/221709190464 - FC layer과 CNN에 관한 내용
https://umbum.tistory.com/223 - FC layer과 CNN에 관한 내용
https://bcho.tistory.com/1149 - FC layer과 CNN에 관한 내용
5. CNN
CNN은 Convolutional Neural Network의 약자로 이미지 인식과 컴퓨터 비전에 대한 문제를 전문으로 하는 신경망의 일종이다. 이 CNN의 레이어는 크게 이미지를 형상으로 분할하고 분석하는 Convolution, Pooling 메커니즘과 이미지를 분류, 설명하는 데에 주로 사용되는 Fully Connected layer로 구성된다. CNN을 사용하는 이유는 Fully connected layer보다 convolution layer가 학습에 필요한 연산량과 파라미터가 훨씬 적기 때문이다.
일단 Convolutional layer는 입력 데이터로부터 이미지에 대한 특징을 추출하는 역할을 한다. 이 Convolutional layer는 특징을 추출하는 기능을 하는 필터(Filter)와, 이 필터의 값을 비선형 값으로 바꾸어 주는 활성화 함수로 이루어진다. 먼저 필터는 그 특징이 데이터에 있는지 없는지를 검출해주는 함수이다. 만약에 필터는 입력받은 데이터에서 그 특성을 가지고 있으면 결과 값이 큰 값이 나오고, 특성을 가지고 있지 않으면 결과 값이 0에 가까운 값이 나오게 되서 데이터가 그 특성을 가지고 있는지 없는지 여부를 알 수 있게 해준다. 다중 필터를 사용하여 각기 다른 특징을 추출하는 필터를 조합해보면, 원본 데이터가 어떤 형태의 특징을 가지고 있는지 없는지를 판단해 낼 수 있다. 이렇게 필터를 통해서 값을 추출한 후 이 값들은 활성화 함수를 거치며 그 특징이 있는지 혹은 없는지가 비선형 값으로 바뀌어 나타나게 된다. 필요에 따라서 Convolutional layer를 거쳐서 추출된 특징에서 모든 특징이 필요하지 않는 경우 필요한 특징들만 뽑아내서 줄이는 과정을 할 수 있는데 이 과정을 Pooling이라고 한다.
Convolutional layer에서 특징을 뽑아낸 후 활성화 함수를 통해 얻은 특징값들은 Fully connected Layer를 거쳐서 분류하게 된다. 위에서 설명했듯이 FC layer에서는 입력층의 1차원 벡터로의 변환, 중간층의 가중치 적용, 출력층의 각 라벨에 대한 최종 확률 제공을 거치게 된다.
추가적인 기능으로 Dropout 계층이 있는데, Dropout은 오버 피팅을 막기 위한 방법으로 뉴럴 네트워크가 학습 중일 때, 랜덤하게 뉴런을 꺼서 학습을 방해함으로써, 학습이 학습용 데이터에 치우치는 현상을 막아준다. ( 과적합(overfitting)은 기계 학습(machine learning)에서 학습 데이터를 과하게 학습(overfitting)하는 것을 뜻한다. 일반적으로 학습 데이터는 실제 데이터의 부분 집합이므로 학습데이터에 대해서는 오차가 감소하지만 실제 데이터에 대해서는 오차가 증가하게 된다.) 마지막으로 Softmax는 output이 확률값을 가질 수 있게 하는 함수이다. output들이 softmax함수를 거치며 모든 class의 output이 1이 되게 되고 따라서 모든 class를 고려했을 때 각 class에 대한 확률을 의미하게 학습을 진행할 수 있다.
Convolutional layer은 convolutional filter 사이즈에 해당하는 local input들만 해당 output에 영향을 미치는 구조이다.
출처 : 김** 님의 finalize에 사용된 사진
구글에 diagram을 검색하면 관련 이미지가 나옴.
6. 주성분 분석
실생활에서 다루는 변수와 변수에 따른 데이터의 양은 방대하다. 이렇게 많은 데이터들을 벡터로 나타낼 경우 고차원 벡터가 형성되어 이를 분석하기란 쉽지 않다. 따라서 데이터의 분포를 최대한 보존하면서, 데이터의 차원을 줄이는 것이 필요하다. 이를 차원 축소라고 하는데 이런 차원 축소의 한 가지 방법이 주성분 분석(Principal Component Analysis)이다. 주성분 분석은 서로 직교하는 새 기저를 찾아서 선형 연관성이 있는 고차원 공간의 데이터들을 선형 연관성이 없는 저차원 공간으로 변환하게 된다.
일단 주성분 분석을 알기 위해서는 공분산과 공분산 행렬에 대한 간단한 이해가 필요하다. 공분산은 연속 확률 변수가 하나가 아닌 여러 개인 경우 여러 확률변수 사이의 상관관계를 나타내게 된다. 분산과 대응되는 개념으로써 각 확률변수들이 어떻게 퍼져있는지를 보여주는 개념이라고 받아들이면 된다.
( 공분산은 로 정의된다. )
공분산 행렬은 각 데이터의 분산과 공분산을 이용하여 만든 행렬이다. 공분산 행렬은 정사각 행렬로 주대각 성분은 각 변수의 분산, 그리고 나머지 부분은 공분산으로 채운 행렬이다. 여기서 알아두어야 할 내용은 공분산행렬에서 고유벡터와 고윳값을 찾는 것은 데이터의 주성분(principal component)을 찾는 것과 동일하다는 것이다. 왜냐하면 고유 벡터는 행렬이 어떤 방향으로 힘을 가하는지를 표현하는데, 이것은 데이터가 어떤 방향으로의 분산이 가장 큰 지를 구하는 것과 같기 때문이다. 고윳값(Eigenvalues)은 각 고유벡터에 해당하는 상관계수이다. 우리가 다루는 행렬이 공분산 행렬일 경우 고윳값은 각 축에 대한 공분산 값이 된다. 그리고 고윳값이 큰 순서대로 고유벡터를 정렬하면, 결과적으로 중요한 순서대로 주성분을 구하는 것이 된다.
원래 데이터 두 직교 축으로 PCA한 데이터
출처 :
https://m.blog.naver.com/PostView.nhn?blogId=ssdyka&logNo=221258236172&proxyReferer=https%3A%2F%2Fwww.google.com%2F
이상구 님의 교재 - Math4AI-v63-main.pdf
엄@@
3. [Final Project]
Basic Math for AI
Prof. Sang-Gu Lee
Project
Introduction of Github
Team members
황**, 김**
Sungkyunkwan University
Basic Math for AI
Project 목적
Git과 Github를 처음 접하는 이들이 git을 사용하는 것을 무서워 하지 않고 언제든지 시작할 수 있게 도와주는 지침서 제작
Project 역할분담
황** :
1. 역할 분배
2. 깃허브 자료조사( 주요 명령여, 기본 용어)
3. 깃허브 소개글과 초한 및 Report 작성
4. Exam 1 – part 6 ~7
김** :
1. 깃허브 자료조사( branch, markdown 등)
2. 깃허브 내 프로젝트 작성
3. 깃허브 활용 예제 선정 및 깃허브에 추가
Exam 1 ~ 2
1. Introduction
간단한 작업은 개인의 단위에서 해결할 수 있지만, 단체가 품고있는 문제나 목적을 달성하기 위해서는 서로가 협업을 해서 하나의 결과물을 만들어야 한다. 우리는 이런 것을 프로젝트라고 한다. 그에 따라 협업의 편의성과 효율성을 증대시켜주는 많은 소프트웨어들이 많이 제공되어지고 있다. 문서를 공동으로 작성을 해야할 때 구글 드라이브나 MS 쉐어포인트는 만족 할만한 기능을 제공한다. 이런 클라우드 상에서의 공동 작업 특히 코딩을 작성할 때 엄청난 효율을 보여준다. 그래서 우리는 코딩의 협업을 도와주는 여러 소프트웨어가 있지만 그 중 가장 파워풀하고 대중적인 깃과 깃허브에 대해서 소개를 해볼까한다.
깃과 깃허브는 SNS다. 그것들은 언제 어디서도 다른 팀원과 함께 코딩을 같이 할 수 있게 해줄 뿐 아니라 무수한 오픈 소스들의 바다이다. IT업계의 비중이 점점 커지면서 컴퓨터 언어와 프로그래밍에 대한 수요가 늘어나고 있다. 일부 직종에서는 Github의 계정이 포트폴리오를 대신할 정도로 깊숙히 자리 잡았다. 프로그래밍에 관심이 있다면 Github는 필수앱이 되버렸다는 뜻이다. 친구와 소통하고 싶으면 페이스북을 깔고 프로그래머들과 소통하고 싶으면 깃허브를 시작해라.
깃(Git)이란
깃허브를 소개하기 전에 깃(Git)이란 무엇인지 먼저 알아보자. 깃이란 프로젝트를 변경, 수정할 때 다른 유저와 겹쳐지지 않게 프로젝트의 변경을 관리하는 버전관리 소프트웨어이다. 깃과 같은 프로그램을 왜 써야될까? 다음과 같은 상황을 예를 들어보겠다. 만약 당신이 당신의 동료와 같은 웹사이트에서 프로젝트를 편집하고 있다고 하자. 당신과 동료과 동시에 같은 페이지를 편집을 한다면 누군가가 했던 작업은 지워질 것이다. 깃과 같은 버전관리 소프트웨어를 사용한다면 각각의 편집본을 따로 저장한다. 이후에, 당신과 동료는 어떤 작업도 놓치지 않고 변경사항들을 모두 취합할 수 있다.
깃허브(Github)
깃허브는 위에서 설명한 깃을 편리하게 사용할 수 있게 도와주는 Tool이다. 깃허브 소프트웨어를 다운로드하면, 로컬에서도 프로젝트를 관리를 할 수 있게 도와주는 비쥬얼 인터페이스를 제공한다. 또, 깃허브 계정을 생성하면 웹에서 프로젝트의 버전관리를 할 수 있으며, 소셜 네트워킹 기능을 통해 다른 유저와도 소통을 할 수 있다. 수많은 유저가 깃허브에 오픈소스로 올려놓은 프로젝트들을 볼 수 있고, 다운로드해서 다양한 방면으로 활용해 볼 수도 있다.
2. 기본 용어
이 튜토리얼에서 반복적으로 사용하려고 하는 몇 개의 용어가 있다.
커맨트 라인(Command Line) |
깃 명령어를 입력할 때 사용하는 컴퓨터 프로그램. 맥에선 터미널이라고 한다. PC에선 기본적인 프로그램이 아니어서 처음엔 깃을 다운로드해야 한다(다음 섹션에서 다룰 것이다). 두 경우 모두 마우스를 사용하는 것이 아닌 프롬프트로 알려진 텍스트 기반 명령어를 입력한다. |
저장소(Repository) |
프로젝트가 거주(live)할 수 있는 디렉토리나 저장 공간. 깃허브 사용자는 종종 “repo”로 줄여서 사용한다. 당신의 컴퓨터 안의 로컬 폴더가 될 수도 있고, 깃허브나 다른 온라인 호스트의 저장 공간이 될 수도 있다. 저장소 안에 코드 화일, 텍스트 화일, 이미지 화일을 저장하고, 이름붙일 수 있다. |
버전관리(Version Control) |
기본적으로, 깃이 서비스되도록 고안된 목적. MS 워드 작업할 때, 저장하면 이전 화일 위에 겹쳐쓰거나 여러 버전으로 나누어 저장한다. 깃을 사용하면 그럴 필요가 없다. 프로젝트 히스토리의 모든 시점의 “스냅샷”을 유지하므로, 결코 잃어버리거나 겹쳐쓰지 않을 수 있다. |
커밋(Commit) |
깃에게 파워를 주는 명령이다. 커밋하면, 그 시점의 당신의 저장소의 “스냅샷”을 찍어, 프로젝트를 이전의 어떠한 상태로든 재평가하거나 복원할 수 있는 체크포인트를 가질 수 있다. |
브랜치(Branch) |
여러 명이 하나의 프로젝트에서 깃 없이 작업하는 것이 얼마나 혼란스러울 것인가? 일반적으로, 작업자들은 메인 프로젝트의 브랜치를 따와서(branch off), 자신이 변경하고 싶은 자신만의 버전을 만든다. 작업을 끝낸 후, 프로젝트의 메인 디렉토리인 “master”에 브랜치를 다시 “Merge”한다. |
깃은 리눅스와 같은 큰 프로젝트를 염두에 두고 디자인되었기 때문에, 깃 명령어는 아주 많다. 그러나, 깃의 기본을 사용할 때에는 몇 개의 명령어만 알면된다. 모두 “git”이란 단어로 시작된다.
git init |
깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이것을 입력한 후에야 추가적인 깃 명령어들을 줄 수 있다. |
git config |
“configure”의 준말, 처음에 깃을 설정할 때 가장 유용하다. |
git help |
명령어를 잊어버렸다? 커맨드 라인에 이걸 타이핑하면 21개의 가장 많이 사용하는 깃 명령어들이 나타난다. 좀 더 자세하게 “git help init”이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수도 있다. |
git status |
저장소 상태를 체크. 어떤 화일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다. |
git add |
이 명령이 저장소에 새 화일들을 추가하진 않는다. 대신, 깃이 새 화일들을 지켜보게 한다. 화일을 추가하면, 깃의 저장소 “스냅샷”에 포함된다. |
git commit |
깃의 가장 중요한 명령어. 어떤 변경사항이라도 만든 후, 저장소의 “스냅샷”을 찍기 위해 이것을 입력한다. 보통 “git commit -m “Message hear.” 형식으로 사용한다. -m은 명령어의 그 다음 부분을 메시지로 읽어야 한다는 것을 말한다. |
git branch |
여러 협업자와 작업하고 자신만의 변경을 원한다? 이 명령어는 새로운 브랜치를 만들고, 자신만의 변경사항과 화일 추가 등의 커밋 타임라인을 만든다. 당신의 제목이 명령어 다음에 온다. 새 브랜치를 “cats”로 부르고 싶으면, git branch cats를 타이핑한다. |
git checkout |
글자 그대로, 현재 위치하고 있지 않은 저장소를 “체크아웃”할 수 있다. 이것은 체크하길 원하는 저장소로 옮겨가게 해주는 탐색 명령이다. master 브랜치를 들여다 보고 싶으면, git checkout master를 사용할 수 있고, git checkout cats로 또 다른 브랜치를 들여다 볼 수 있다. |
git merge |
브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master 브랜치로 병합할 수 있다. git merge cats는 “cats” 브랜치에서 만든 모든 변경사항을 master로 추가한다. |
git push |
로컬 컴퓨터에서 작업하고 당신의 커밋을 깃허브에서 온라인으로도 볼 수 있기를 원한다면, 이 명령어로 깃허브에 변경사항을 “push”한다. |
git pull |
로컬 컴퓨터에서 작업할 때, 작업하고 있는 저장소의 최신 버전을 원하면, 이 명령어로 깃허브로부터 변경사항을 다운로드한다(“pull”). |
[출처 : https://nolboo.kim/blog/2013/10/06/github-for-beginner/]
4. 마크다운
텍스트 기반의 마크업 언어로써 쉽게 쓰고 읽을 수 있으며 HTML로 변환이 가능하다. 특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 컨텐츠를 작성하고 보다 직관적으로 인식할 수 있다. 마크다운이 최근 각광받기 시작한 이유는 깃헙(https://github.com) 덕분이다. 깃헙의 저장소Repository에 관한 정보를 기록하는 README.md는 깃헙을 사용하는 사람이라면 누구나 가장 먼저 접하게 되는 마크다운 문서였다. 마크다운을 통해서 설치방법, 소스코드 설명, 이슈 등을 간단하게 기록하고 가독성을 높일 수 있다는 강점이 부각되면서 점점 여러 곳으로 퍼져가게 된다. 즉, 깃허브를 통해 협업을 하기위해서 텍스트 파일을 이용한다. 그 때 텍스트 파일 내에서 사용할 수 있는 컴퓨터 언어, 문법들을 말한다.
장점
1. 간결하다.
2. 별도의 도구없이 작성가능하다.
3. 다양한 형태로 변환이 가능하다.
3. 텍스트(Text)로 저장되기 때문에 용량이 적어 보관이 용이하다.
4. 텍스트파일이기 때문에 버전관리시스템을 이용하여 변경이력을 관리할 수 있다.
5. 지원하는 프로그램과 플랫폼이 다양하다.
단점
1. 표준이 없다.
2. 표준이 없기 때문에 도구에 따라서 변환방식이나 생성물이 다르다.
3. 모든 HTML 마크업을 대신하지 못한다.
마크다운 사용법(문법)
아래 링크에서 상세하게 설명해주기 때문에 첨부합니다.
https://gist.github.com/ihoneymon/652be052a0727ad59601
[comment]
아직 깃허브에 익숙하지 않고 활용해볼 상황이나 환경이 되지 않아서 Markdown 을 제대로 활용해 보지는 못했다. 그렇지만 마크다운 언어 문법의 직관성과 간단한 구조 그리고 txtf를 이용해 update를 한다는 것에서 유저 친화적임을 느낄 수 있었다.
5. 실제 예제를 통한 Github 활용하기
Step.1 문제상황 인식하기
Step.2 Github를 통해 다른 사람의 연구자료, 공유물을 조사
- 검색창에 boston house 만 검색해도 우리는 800개 이상의 관련 자료들을 찾을 수 있다.
- 하지만 위 자료는 선형회기가 아닌 커브피팅을 이용한 정밀한 예측을 하고 있으므로 교수님께서 준비한 repository로 대체한다.
Step.3 코드를 내려받아서 내가 필요한 곳에서 사용한다.
https://github.com/freelec/ai-math-book
위 사이트는 보스턴의 집과 가격간의 모델을 선형 회기를 이용해 만드는 방법을 보여준다.
이 코드들을 활용하여 내가 필요한 곳에 사용하면 된다.
Step.4 Result
Boston house-prices 데이터 선형회귀 분석
데이터 분석을 위해 사용된 모듈들 입니다
In [1]:
# 데이터 가공 모듈
import numpy as np
from pandas import DataFrame
# 데이터 가시화 모듈
import matplotlib.pyplot as plt
%matplotlib inline
# 기계학습 모듈
from sklearn import linear_model
from sklearn.datasets import load_boston
# from sklearn.cross_validation import train_test_split
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 소수점 3째짜리까지 표시
%precision 3
Out[1]:
'%.3f'
데이터를 불러와서 DataFrame형식으로 변환합니다
In [2]:
## 데이터 준비
# 보스턴 데이터 셋 임포트
# Load and return the boston house-prices dataset (regression).
boston =load_boston ()
# 설명변수들을 DataFrame으로 변환
df =DataFrame (boston .data ,columns =boston .feature_names )
# 목적변수를 DataFrame에 추가
df ['MEDV']=np .array (boston .target )
In [3]:
# 최초 5행을 표시
df .head ()
Out[3]:
|
CRIM |
ZN |
INDUS |
CHAS |
NOX |
RM |
AGE |
DIS |
RAD |
TAX |
PTRATIO |
B |
LSTAT |
MEDV |
0 |
0.00632 |
18.0 |
2.31 |
0.0 |
0.538 |
6.575 |
65.2 |
4.0900 |
1.0 |
296.0 |
15.3 |
396.90 |
4.98 |
24.0 |
1 |
0.02731 |
0.0 |
7.07 |
0.0 |
0.469 |
6.421 |
78.9 |
4.9671 |
2.0 |
242.0 |
17.8 |
396.90 |
9.14 |
21.6 |
2 |
0.02729 |
0.0 |
7.07 |
0.0 |
0.469 |
7.185 |
61.1 |
4.9671 |
2.0 |
242.0 |
17.8 |
392.83 |
4.03 |
34.7 |
3 |
0.03237 |
0.0 |
2.18 |
0.0 |
0.458 |
6.998 |
45.8 |
6.0622 |
3.0 |
222.0 |
18.7 |
394.63 |
2.94 |
33.4 |
4 |
0.06905 |
0.0 |
2.18 |
0.0 |
0.458 |
7.147 |
54.2 |
6.0622 |
3.0 |
222.0 |
18.7 |
396.90 |
5.33 |
36.2 |
불러온 데이터를 이용하여 Linear Regession 모델을 학습합니다
In [4]:
# 오브젝트 생성
model =linear_model .Ridge ()
# fit함수에서 파라미터 추정
model .fit (boston .data ,boston .target )
Out[4]:
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
normalize=False, random_state=None, solver='auto', tol=0.001)
In [5]:
# 회귀계수를 출력
print (model .coef_)
print (model .intercept_)
[-1.046e-01 4.744e-02 -8.805e-03 2.552e+00 -1.078e+01 3.854e+00
-5.415e-03 -1.373e+00 2.901e-01 -1.291e-02 -8.761e-01 9.673e-03
-5.333e-01]
31.59766981827412
모델이 학습이 잘 되었는지 검증합니다.
Train : Test = 3 : 1 의 비율로 분할 후 검증합니다.
In [6]:
# 75%를 학습용, 25%를 검증용 데이터로 하기 위해 분할
X_train ,X_test ,y_train ,y_test =train_test_split (boston .data ,boston .target ,test_size =0.25 ,random_state =100 )
# 학습용 데이터에서 파라미터 추정
model .fit (X_train ,y_train )
# 작성한 모델로부터 예측(학습용, 검증용 모델 사용)
y_train_pred =model .predict (X_train )
y_test_pred =model .predict (X_test )
In [7]:
# 학습용, 검증용 각각에서 잔차를 플롯
plt .scatter (y_train_pred ,y_train_pred -y_train ,c ='gray',marker ='o',label ='Train Data')
plt .scatter (y_test_pred ,y_test_pred -y_test ,c ='blue',marker ='s',label ='Test Data')
plt .xlabel ('Predicted Values')
plt .ylabel ('Residuals')
# 범례를 왼쪽 위에 표시
plt .legend (loc ='upper left')
# y = 0의 직선을 그림
plt .hlines (y =0 ,xmin =-10 ,xmax =50 ,lw =2 ,color ='black')
plt .xlim ([0 ,50 ])
plt .show ()
In [10]:
# 학습용, 검증용 데이터에 대하여 평균제곱오차를 출력
print ('MSE Train : %.3f , Test : %.3f '%(mean_squared_error (y_train ,y_train_pred ),mean_squared_error (y_test ,y_test_pred )))
# 학습용, 검증용 데이터에 대하여 R^2를 출력
print ('R^2 Train : %.3f , Test : %.3f '%(model .score (X_train ,y_train ),model .score (X_test ,y_test )))
MSE Train : 20.632, Test : 27.977
R^2 Train : 0.741, Test : 0.716
출처 : https://github.com/freelec/ai-math-book
============
6. Final comment
황** :
깃허브를 통해 언제 어디서라도 함께 공유하고 있는 프로젝트를 업데이트할 수 있다는 점이 매우 매력적이였다. 하지만 내가 생각하는 github의 진짜 장점은 서로의 지식들을 공유할 수 있는 장소라는 것이 아닐까 싶다. 나와 같이 초심자는 컴퓨터 코딩이 익숙하지 않고 어디서 정보를 구해서 어떻게 활용해야 좋을지 몰라서 시작조차 못하는 경우가 더러 있지 않을까 싶다. 하지만 github를 접하고는 뭔가 필요할 때면 혹은 다른 사람들은 이런 문제를 어떻게 해결했는지 알고 싶을때면, 주저하지않고 github에 들어와서 검색해보고 활용하고 있다. 이렇게 github의 필요성과 중요성을 이번 프로젝트을 진행하면서 많이 느끼게 되었다.
김**
깃허브를 이용하면 직접 실행한 코드를 공유할 뿐만 아니라 실행결과도 함께 보여줄 수 있어서 직관성이 더 높아진 것 같다. 그리고 협업을 할 때에 마크다운 서식을 이용하면 좀 더 편한 의사소통이 가능할 것 같다.
7. Project를 통해 배운 점
황** : 먼저 조장으로써 능동적으로 팀을 꾸리고 이끄는 방법을 배웠다. 전에는 항상 팀 명단이 정해지고 그에 따라 활동을 시작했지만, 이 수업에서는 스스로가 팀을 꾸리고 팀원을 뽑아 프로젝트를 진행해야 했다. 처음에는 매우 어색했고, 잘 모르는 학우들에게 선뜻 연락을 먼저 하는 것이 어려웠었다. 하지만 내가 만약 어떤 회자의 팀장이라면 당연히 할 줄 알아야 하는 일이였고, 팀원이라면 나의 능력을 어필해서 프로젝트에 당당히 참여할 수 있는 능력을 어필할 줄 알아야 함을 느낄 수 있었다. 그리고 능력을 갖추고 능동적인 참여를 할 줄 아는 팀의 프로젝트의 결과물을 보면서 한 번 더 느낄 수 있었다.
김** : 저는 이번 수업에서 배운 것은 학우분들과 상호작용하며 지식을 재생산하는 방법이라 생각합니다. 그래서 프로젝트를 진행할 때에도 지식의 재생산을 도울 수 있는 깃허브에 대해서 공부를 하였습니다. 이 과정에서 저는 협업을 하는 데에 깃허브가 큰 도움을 줄 수 있는 도구라는 것을 알게 되었습니다. 깃허브를 어떻게 하면 잘 사용할 수 있을지에 대해서 고민을 하는 계기가 되었습니다. 그 결과 이제는 여러 사람들과 소통을 하며 프로젝트를 진행 할 때에 깃허브를 잘 활용할 수 있게 되었습니다. 또한 이 프로젝트를 통해 많은 학우분들이 깃허브에 대해서 알게 되고, 깃허브를 사용하는 데에 도움이 되었으면 좋겠습니다. 프로젝트를 진행함에 있어서 팀원이 작업을 성실히 수행해 주어서 온전히 제 역할에 집중 할 수 있어서 좋았습니다.
Reference
[1] 완전 초보를 위한 깃허브(2013), : https://nolboo.kim/blog/2013/10/06/github-for-beginner/
[2] "[공통] 마크다운 사용법" Internet : https://gist.github.com/ihoneymon/652be052a0727ad59601
,Kim Ji Heon, [Dec.03.2019 ]
[3] “Branch” Internet : https://backlog.com/git-tutorial/kr/stepup/stepup1_1.html, [Dec.03.2019 ]
[4] “ai_math_book” Internet : https://github.com/freelec/ai-math-book
3. [Final Project] Team Project Midterm Report
How to use Tensorflow
Basic Math for AI
Prof : Sang-Gu LEE
Team Members
박**, 정**, 홍**, 김**
Due day : 11/28
I-campus HW box (과제함)
1. 동기
2016년 알파고의 등장 이후 인공지능이라는 분야가 급격히 부상했습니다. 인공지능과 같이 알파고 인공지능의 토대인 딥러닝, 즉 인공신경망 역시 급격히 부상하게 되었습니다.
인공지능은 컴퓨터로 인간의 사고를 모방하는 것, 그리고 인공신경망은 인간의 뇌의 동작 방식에서 착안해 인간의 뉴런과 같은 신경망을 컴퓨터로 구현하여 인간의 생각을 모방하는 학습 방식입니다.
2. 이론적 배경
인공지능에는 여러 가지가 있습니다. 가장 간단한 것은 규칙 기반 인공지능입니다. 무수한 if를 통해 대상의 특성을 분류하고, 분류 결과에 따라 대상이 무엇인지, 어떤 행동을 수행해야 하는지 찾아내는 방식입니다.
여기에서 발전된 방식이 머신 러닝입니다. 인간이 데이터를 넣어 주면, 컴퓨터가 알고리즘대로 스스로 데이터의 특성을 추출하고 학습합니다.
마지막으로 인공 신경망입니다. 인공 신경망은 머신 러닝에 쓰이는 한 가지 방법으로써, 신경망을 구축하면 입력 데이터가 신경망의 입력층에 들어가고, 각각 신경망의 가중치를 곱하고 다음 층으로 넘어가며 결과를 얻어냅니다. 그리고 이 결과가 진실과 가까워질 때까지 신경망의 가중치를 변경합니다.
텐서플로우는 머신러닝 프로그램, 특히 인공 신경망, 딥러닝을 쉽게 구현할 수 있도록 기능을 제공해 주는 라이브러리입니다. 이 라이브러리는 C++로 작성되었지만 여러 다른 언어에서도 이 라이브러리를 사용할 수 있습니다. 하지만 텐서플로우는 많은 언어 중에 Python을 집중적으로 지원하여 많은 편의 기능이 Python쪽 라이브러리에만 구현되어 있는 것이 많으니 Python을 통해 텐서플로우를 사용하는 것이 추천됩니다.
또한 이 라이브러리는 여러 운영체제, 윈도우, 맥, 리눅스, 안드로이드 등에서 사용할 수 있도록 지원되므로 매우 다양한 프로그램, 예를 들면 안드로이드 어플리케이션, 라즈베리 파이 임베디드 등에서 응용하기도 편합니다.
또한 텐서플로우는 사용하는 사람이 가장 많은 머신러닝 라이브러리로, 사람이 많은 만큼 커뮤니티가 활성화되어 있고, 여러 질문과 답변들이 이미 등록되어 있습니다. 자신이 텐서플로우로 프로그램을 만들다 발생하는 오류의 대부분은 이미 질문과 해결책이 등록되 있기 때문에 배우기 또한 쉽습니다. 그렇기 때문에 머신 러닝의 입문으로 텐서플로우가 가장 많이 추천되는 라이브러리가 되었습니다.
3. 텐서플로우의 설치
텐서플로우를 사용하려면 먼저 파이썬을 설치해야 합니다. 파이썬은 www.python.org 에서 다운로드할 수 있습니다. 다만 주의해야 할 점은 텐서플로우는 아직 최신 버전의 파이썬을 지원하지 않는다는 점입니다. 그러므로 최신 버전의 파이썬을 설치하면 텐서플로우를 사용할 수 없게 됩니다. 2019년 11월 현재 텐서플로우는 파이썬 버전 3.7까지 지원합니다. 따라서 파이썬 3.7을 설치하면 텐서플로우를 사용할 수 있습니다.
그림 1. 파이썬 3.7의 마지막 버전
[그림 1]을 보면, 현재 나와 있는 최신 버전의 파이썬 3.7은 3.7.5입니다. 그러므로 사용자의 컴퓨터 아키텍처가 64비트라면 “Download Windows x86-64 executable installer”를 눌러 다운로드, 설치할 수 있고, 32비트라면 “Download Windows x86 executable installer”로 다운로드, 설치할 수 있습니다.
파이썬 설치가 완료되었다면, 이제 텐서플로우를 설치할 준비가 되었습니다. 텐서플로우의 설치법은 공식 사이트인 https://www.tensorflow.org/install/pip?hl=ko&lang=python3 에서 알려주고 있습니다. 파이썬의 패키지 관리자인 pip를 이용하는 방법입니다.
그림 2. 텐서플로우의 설치법
명령 프롬프트에 명령어 “pip3 install --user --upgrade tensorflow”를 입력하면 파이썬 패키지 관리자 pip가 자동으로 텐서플로우를 다운로드받아 설치하게 됩니다.
4. 텐서플로우의 기초 by 박**
먼저, 여기에서 설명할 텐서플로우는 파이썬 상에서 사용되는 라이브러리입니다. 즉, 파이썬을 먼저 알아야 텐서플로우를 쓸 수 있습니다. 파이썬의 사용법에 대해서는 인터넷 블로그에 게시물로 되어 있는 강좌들이 있으니 학습해 보시기 바랍니다.
텐서플로우의 첫 번째로, “Hello, Tensorflow!”가 들어 있는 상수 텐서를 선언하고 실행시켜 봅시다.
import tensorflow as tf # tf.constant: 상수가 들어있는 텐서를 선언할 수 있습니다. hello = tf.constant('Hello, TensorFlow!') |
위의 코드는 텐서플로우 라이브러리를 tf라는 이름으로 import하고, 상수 텐서를 선언하여 hello라는 변수에 넣는 코드입니다. 이제 hello라는 변수 안에는 Hello, TensorFlow!라는 데이터가 들어 있습니다.
이 텐서를 실행하려면 텐서플로우에서는 세션이라는 개념을 사용합니다. 어느 하나의 세션에 텐서들을 탑재해 세션이 텐서를 따라 결과를 도출해 내는 식입니다.
sess = tf.Session() # sess.run: 설정한 텐서 그래프(텐서의 연결체)를 실행합니다. print(sess.run(hello)) sess.close() |
텐서플로우의 세션을 sess라는 변수 안에 넣고, hello라는 텐서의 값을 도출해 냈습니다.
이 코드는 “Hello, TensorFlow!”를 출력합니다.
또한 텐서플로우는 각 텐서 간의 연산 또한 할 수 있습니다.
import tensorflow as tf a = tf.constant(10) b = tf.constant(32) c = tf.add(a, b) # a + b 로도 쓸 수 있음 |
10을 저장하는 텐서 a와 32를 저장하는 텐서 b가 있습니다. 그리고 이 둘을 더해 c라는 텐서를 만들었습니다. 하지만 이 c라는 텐서에 바로 42가 들어가지는 않습니다. 위에서 본 세션을 사용해 텐서 c를 돌릴 수 있습니다.
sess = tf.Session() print(sess.run(c)) |
결과는 물론 42가 출력됩니다.
또, 텐서플로우는 변수 또한 생성할 수 있습니다.
X = tf.placeholder(tf.float32, [None, 3]) |
이 코드는 입력층에서 자주 쓰게 될 placeholder 변수를 선언하는 코드입니다. None은 크기가 정해지지 않았다는 뜻이며, m x 3 행렬이 이 placeholder 변수에 입력으로 들어갈 수 있습니다.
W = tf.Variable(tf.random_normal([3, 2])) b = tf.Variable(tf.random_normal([2, 1])) |
이 코드는 random_normal(정규분포 N(0,1)를 따르는 랜덤한 값)을 채운 3x2 행렬인 W, 2x1 행령인 b를 선언하는 모습이다
expr = tf.matmul(X, W) + b sess = tf.Session() # 위에서 설정한 Variable 들의 값들을 초기화 하기 위해 # 처음에 tf.global_variables_initializer 를 한 번 실행해야 합니다. sess.run(tf.global_variables_initializer()) print("=== W ===") print(sess.run(W)) print("=== b ===") print(sess.run(b)) print("=== expr ===") # expr 수식에는 X 라는 placeholder에 들어갈 입력값이 필요합니다. # 따라서 expr 실행시에는 이 변수에 대한 실제 입력값을 넣어줘야합니다. x_data = [[1, 2, 3], [4, 5, 6]] print(sess.run(expr, feed_dict={X: x_data})) |
이 코드는 expr이라는 텐서를 XW + b라는 관계로 선언하고, 결과를 구하고 있습니다. sess.run(W), sess.run(b)를 통해 행렬 안을 랜덤한 수로 채우고, X에 x_data를 넣고 세션을 이용해 구하고 있습니다. 결과는 일반적인 행렬곱과 같이 X와 W를 곱한 다음 b를 각각에 더한 값이 됩니다.
마지막으로, 기초의 끝인 선형 근사입니다.
import tensorflow as tf x_data = [1, 2, 3] y_data = [1, 2, 3] W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) X = tf.placeholder(tf.float32, name="X") Y = tf.placeholder(tf.float32, name="Y") print(X) print(Y) |
위의 코드로 필요한 데이터를 생성하고, 변수들을 선언합니다. 이번에는 행렬 변수가 아니라 하나의 값만 가지는 변수로 선언했습니다.
hypothesis = W * X + b |
이렇게 선언하면 hypothesis 텐서에서 데이터에 근사될 직선의 방정식의 계산값이 저장되게 됩니다.
# 손실 함수를 작성합니다. # mean(h - Y)^2 : 예측값과 실제값의 거리를 비용(손실) 함수로 정합니다. cost = tf.reduce_mean(tf.square(hypothesis - Y)) # 텐서플로우에 기본적으로 포함되어 있는 함수를 이용해 경사 하강법 최적화를 수행합니다. optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1) # 비용을 최소화 하는 것이 최종 목표 train_op = optimizer.minimize(cost) |
그리고, 근사를 위해 손실 함수를 작성해야 합니다. 선형근사에는 예측값(hypothesis)과 실제값(Y data)사이의 거리를 손실함수로 정하고, 경사 하강법(GradientDescentOptimizer)을 이용해 손실함수를 최소화 시키는 쪽으로 학습시킵니다.
with tf.Session() as sess: sess.run(tf.global_variables_initializer()) # 최적화를 100번 수행합니다. for step in range(100): # sess.run 을 통해 train_op 와 cost 그래프를 계산합니다. # 이 때, 가설 수식에 넣어야 할 실제값을 feed_dict 을 통해 전달합니다. _, cost_val = sess.run([train_op, cost], feed_dict={X: x_data, Y: y_data}) print(step, cost_val, sess.run(W), sess.run(b)) # 최적화가 완료된 모델에 테스트 값을 넣고 결과가 잘 나오는지 확인해봅니다. print("\n=== Test ===") print("X: 5, Y:", sess.run(hypothesis, feed_dict={X: 5})) print("X: 2.5, Y:", sess.run(hypothesis, feed_dict={X: 2.5})) |
With 키워드로 세션을 열고, 변수를 초기화합니다.
그리고 for 문을 통해 세션을 100회 학습시키면서 좋은 W, b값을 찾는 것으로 선형 근사가 마무리됩니다.
5. 신경망 by 홍**
신경망 모델 구성
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
W = tf.Variable(tf.random_uniform([2, 3], -1., 1.)) # 신경망은 2차원[2(특성),3(레이블)]으로 정합니다.
b = tf.Variable(tf.zeros([3])) # 편향은 최종 결과값의 분류 개수인 3으로 정합니다.
L = tf.add(tf.matmul(X, W), b) # 신경망에 가중치 w와 편향 b을 적용합니다.
L = tf.nn.relu(L)
model = tf.nn.softmax(L)
cost = tf.reduce_mean(-tf.reduce_sum(Y * tf.log(model), axis=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(cost) # 신경망을 최적화하기 위한 비용함수를 작성합니다.
신경망 모델 학습
결과 확인
딥 러닝
#신경망 모델 구성 단계만 수정하여 신경망의 레이어를 여러 개로 구성하여 딥러닝을 구성해 봅니다.
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.)) # 첫번째 가중치의 차원은 [2,10]으로 정합니다.
W2 = tf.Variable(tf.random_uniform([10, 3], -1., 1.)) # 두번째 가중치의 차원은 [10,3]으로 정합니다.
b1 = tf.Variable(tf.zeros([10])) #히든 레이어의 뉴런 개수 10으로 설정합니다.
b2 = tf.Variable(tf.zeros([3])) # 분류 개수인 3으로 설정합니다.
L1 = tf.add(tf.matmul(X, W1), b1)
L1 = tf.nn.relu(L1) #신경망의 히든 레이어에 가중치 w1과 편향 b1을 적용합니다
model = tf.add(tf.matmul(L1, W2), b2) # 히든 레이어에 두번째 가중치 w2와 편향 b2를 적용하여 3개의 출력값을 만들어냅니다.
cost = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=model))
optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(cost) # 크로스 엔트로피 함수롤 이용해 최적화를 위한 비용함수를 적용합니다.
Word to Vector
Word2vec 모델을 간단하게 구현해봅니다.
word_sequence = " ".join(sentences).split()
word_list = " ".join(sentences).split()
word_list = list(set(word_list)) # 문장을 전부 합친후 공백으로 단어들을 나누고 고유한 단어들로 리스트를 만듭니다.
word_dict = {w: i for i, w in enumerate(word_list)} # 문자열로 분석하는것보다 숫자로 분석하는것이 훨씬 용이하므로 리스트에서 문자들의 인덱스를 뽑아서 사용하기위해 연관 배열과 단어 리스트에서 단어를 참조할수 있는 인덱스 배열을 만듭니다.
skip_grams = [] #윈도우 사이즈를 1로하는 skip-gram 모델을 만듭니다.
for i in range(1, len(word_sequence) - 1):
target = word_dict[word_sequence[i]]
context = [word_dict[word_sequence[i - 1]], word_dict[word_sequence[i + 1]]]
for w in context:
skip_grams.append([target, w])
def random_batch(data, size):
random_inputs = []
random_labels = []
random_index = np.random.choice(range(len(data)), size, replace=False)
for i in random_index:
random_inputs.append(data[i][0]) # target
random_labels.append([data[i][1]]) # context word
return random_inputs, random_labels # skip-gram 데이터에서 무작위로 데이터를 뽑아 입력값과 출력값의 배치 데이터를 생성하는 함수
training_epoch = 300 #학습을 반복할 횟수
learning_rate = 0.1 #학습률
batch_size = 20 #한번에 학습할 데이터의 크기
embedding_size = 2 #단어 벡터를 구성할 임베딩 차원의 크기
num_sampled = 15 #word2vec 모델을 학습시키기 위한 nce_loss 함수에서 사용하기 위한 샘플링 크기
voc_size = len(word_list) # 총 단어 개수
신경망 모델 구성
inputs = tf.placeholder(tf.int32, shape=[batch_size])
labels = tf.placeholder(tf.int32, shape=[batch_size, 1])
embeddings = tf.Variable(tf.random_uniform([voc_size, embedding_size], -1.0, 1.0)) # word2vec 모델의 결과 값인 임베딩 벡터를 저장할 변수입니다.
selected_embed = tf.nn.embedding_lookup(embeddings, inputs) #임베딩 벡터의 차원에서 학습할 입력값에 대한 행들을 뽑아옵니다.
nce_weights = tf.Variable(tf.random_uniform([voc_size, embedding_size], -1.0, 1.0))
nce_biases = tf.Variable(tf.zeros([voc_size])) #nce_loss 함수에서 사용할 변수들을 정의합니다.
loss = tf.reduce_mean(
tf.nn.nce_loss(nce_weights, nce_biases, labels, selected_embed, num_sampled, voc_size))
train_op = tf.train.AdamOptimizer(learning_rate).minimize(loss) # nce_loss함수를 텐서플로우에서 제공합니다.
신경망 모델 학습
trained_embeddings = embeddings.eval()
임베딩된 word2vec 결과 확인
for i, label in enumerate(word_list):
x, y = trained_embeddings[i]
plt.scatter(x, y)
plt.annotate(label, xy=(x, y), xytext=(5, 2),
textcoords='offset points', ha='right', va='bottom')
plt.show()
6. TensorBoard / Saver by 정**
6-1 Tensorflow Saver
Saver는 TensorFlow 모델을 저장하기 위해 사용합니다. 저장 복구를 위해서는 두개의 파일이 필요합니다.
a) Meta graph
Tensorflow graph를 저장 하게 됩니다. 즉 all variables, operations, collections 등을 저장 합니다. .meta로 확장자를 가집니다.
b) Checkpoint file
binary 파일로 weights, biases, gradients 등을 저장 합니다. 0.11부터는 두개의 파일로 저장됩니다.
model.ckpt.data-00000-of-00001 model.ckpt.index |
.data파일의 경우 training variable를 가지고 있습니다. 여전히 checkpoint파일도 보유하고 있지만 이것은 단순히 최근 상태만을 기록하고 있습니다.
파이썬 코드는 다음과 같습니다.
# 모델을 저장하고 재사용하는 방법을 익혀봅니다. import tensorflow as tf import numpy as np
data = np.loadtxt('./data.csv', delimiter=',', unpack=True, dtype='float32')
# 털, 날개, 기타, 포유류, 조류 # x_data = 0, 1 # y_data = 2, 3, 4 x_data = np.transpose(data[0:2]) y_data = np.transpose(data[2:])
######### # 신경망 모델 구성 ###### # 학습에 직접적으로 사용하지 않고 학습 횟수에 따라 단순히 증가시킬 변수를 만듭니다. global_step = tf.Variable(0, trainable=False, name='global_step')
X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32)
W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.)) L1 = tf.nn.relu(tf.matmul(X, W1))
W2 = tf.Variable(tf.random_uniform([10, 20], -1., 1.)) L2 = tf.nn.relu(tf.matmul(L1, W2))
W3 = tf.Variable(tf.random_uniform([20, 3], -1., 1.)) model = tf.matmul(L2, W3)
cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=model))
optimizer = tf.train.AdamOptimizer(learning_rate=0.01) # global_step로 넘겨준 변수를, 학습용 변수들을 최적화 할 때 마다 학습 횟수를 하나씩 증가시킵니다. train_op = optimizer.minimize(cost, global_step=global_step) |
#########
# 신경망 모델 학습
######
sess = tf.Session()
# 모델을 저장하고 불러오는 API를 초기화합니다.
# global_variables 함수를 통해 앞서 정의하였던 변수들을 저장하거나 불러올 변수들로 설정
합니다.
saver = tf.train.Saver(tf.global_variables())
ckpt = tf.train.get_checkpoint_state('./model')
if ckpt and tf.train.checkpoint_exists(ckpt.model_checkpoint_path):
saver.restore(sess, ckpt.model_checkpoint_path)
else:
sess.run(tf.global_variables_initializer())
# 최적화 진행
for step in range(2):
sess.run(train_op, feed_dict={X: x_data, Y: y_data})
print('Step: %d, ' % sess.run(global_step),
'Cost: %.3f' % sess.run(cost, feed_dict={X: x_data, Y: y_data}))
# 최적화가 끝난 뒤, 변수를 저장합니다.
saver.save(sess, './model/dnn.ckpt', global_step=global_step)
#########
# 결과 확인
# 0: 기타 1: 포유류, 2: 조류
######
prediction = tf.argmax(model, 1)
target = tf.argmax(Y, 1)
print('예측값:', sess.run(prediction, feed_dict={X: x_data}))
print('실제값:', sess.run(target, feed_dict={Y: y_data}))
is_correct = tf.equal(prediction, target)
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
print('정확도: %.2f' % sess.run(accuracy * 100, feed_dict={X: x_data, Y: y_data}))
6-2) TensorBoard
출처: https://pythonkim.tistory.com/39 [파이쿵]
TensorBoard는 TensorFlow에 기록된 로그를 그래프로 시각화시켜서 보여주는 도구입니다.
1. TensorBoard 실행
tensorboard --logdir=/tmp/sample
루트(/) 폴더 밑의 tmp 폴더 밑의 sample 폴더에 기록된 로그를 보겠다 라는 명령.logdir 뒤에는 로그가 기록된 폴더를 명시합니다. 기록된 폴더는 소스 코드를 구동시킬 때 명시하게 되어 있습니다.
즉, 소스 코드를 구동하지 않으면 로그도 없으므로 볼 것도 없다. 다만 로그가 그냥 기록되는 것은 아니고 소스 코드에 직접 관련 코드를 넣어야 합니다.
2. tensorboard 정체
앞에서 실행한 명령의 tensorboard는 파이썬 설치 폴더 아래의 tensorflow 폴더 밑에 있는 tensorboard.py 파일을 가리킵니다.
3. 로그 위치
소스 코드에서 로그를 기록하기 위한 코드입니다.
writer = tf.train.SummaryWriter("/tmp/test_logs", session.graph) |
소스 코드를 구동하면 "/tmp/test_logs" 폴더에 확장자가 local인 파일이 생성됩니다.
-rw-r--r-- 1 applekoong wheel 681 8 1 21:37 events.out.tfevents.1470055070.applekoong.local |
파일 이름이 꽤 길고 복잡합니다. 이 파일이 있어야 tensorboard에서 결과를 볼 수 있습니다.
4. 포트 번호
tensorboard 기본 포트번호는 6006입니다. 필요에 따라 포트 번호를 바꿀 수 있습니다.
tensorboard --logdir=/tmp/sample --port=8008 |
tensorboard 명령을 실행할 때 port 옵션을 사용해서 포트 번호를 지정할 수 있습니다. 동시에 여러 개의 로그를 보고 싶을 때 사용할 수 있습니다.
5. 웹 브라우저
콘솔에서 명령을 입력했을 때, 출력된 메시지를 보면 ip 주소가 나옵니다. 웹 브라우저를 열고 해당 주소와 포트 번호를 입력하면 그래프를 볼 수 있습니다.
입력 주소에는 두 가지가 있습니다. 0.0.0.0:6006 또는 localhost:6006
6. tensorboard 종료
웹 브라우저는 단순히 로그를 시각화하는 역할만 합니다. 웹 브라우저를 종료한다고 해서 tensorboard가 종료되는 것이 아닙니다.
tensorboard 명령을 입력하면 해당 콘솔은 블록(대기) 상태로 들어갑니다. ctrl+c를 입력하면 tensorboard가 종료됩니다.
7. 주의사항
tensorboard를 실행하면 콘솔 창에 알 수 없는 경고가 뜹니다. 결론적으로 결과를 보는 데에는 지장이 없다. 구글링해도 나오지 않습니다.
WARNING:tensorflow:IOError [Errno 2] No such file or directory: '/usr/local/lib/python3.5/site-packages/tensorflow/tensorboard/TAG' on path /usr/local/lib/python3.5/site-packages/tensorflow/tensorboard/TAG WARNING:tensorflow:Unable to read TensorBoard tag |
또 하나는 로그 폴더를 잘못 입력해도 문제가 발생하지 않습니다. 다만 웹 브라우저에 결과가 나타나지 않을 뿐입니다. tensorboard 입장에서는 폴더가 없다고 해서 이상한 행동을 할 필요는 없다고 보는 것으로 추정됩니다.
로그 결과는 계속 누적됩니다. 이전 결과는 사라지지 않고 남아 있습니다. 그러나, 웹 브라우저에서는 최신의 결과만 볼 수 있습니다. 이전 결과를 볼 수는 있겠지만, 화면에서 예전 결과를 선택하는 방법은 찾지 못했습니다.
이전 로그가 있을 때 뜨는 경고 메시지.
WARNING:tensorflow:Found more than one graph event per run. Overwriting the graph with the newest event. |
파이썬 코드는 다음과 같습니다.
# 텐서보드를 이용하기 위해 각종 변수들을 설정하고 저장하는 방법을 익혀봅니다. import tensorflow as tf import numpy as np
data = np.loadtxt('./data.csv', delimiter=',', unpack=True, dtype='float32')
x_data = np.transpose(data[0:2]) y_data = np.transpose(data[2:])
######### # 신경망 모델 구성 ###### global_step = tf.Variable(0, trainable=False, name='global_step')
X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32)
# with tf.name_scope 으로 묶은 블럭은 텐서보드에서 한 레이어안에 표현해줍니다 with tf.name_scope('layer1'): W1 = tf.Variable(tf.random_uniform([2, 10], -1., 1.), name='W1') L1 = tf.nn.relu(tf.matmul(X, W1))
with tf.name_scope('layer2'): W2 = tf.Variable(tf.random_uniform([10, 20], -1., 1.), name='W2') L2 = tf.nn.relu(tf.matmul(L1, W2))
with tf.name_scope('output'): W3 = tf.Variable(tf.random_uniform([20, 3], -1., 1.), name='W3') model = tf.matmul(L2, W3)
with tf.name_scope('optimizer'): cost = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits_v2(labels=Y, logits=model))
optimizer = tf.train.AdamOptimizer(learning_rate=0.01) train_op = optimizer.minimize(cost, global_step=global_step)
# tf.summary.scalar 를 이용해 수집하고 싶은 값들을 지정할 수 있습니다. tf.summary.scalar('cost', cost) |
#########
# 신경망 모델 학습
######
sess = tf.Session()
saver = tf.train.Saver(tf.global_variables())
ckpt = tf.train.get_checkpoint_state('./model')
if ckpt and tf.train.checkpoint_exists(ckpt.model_checkpoint_path):
saver.restore(sess, ckpt.model_checkpoint_path)
else:
sess.run(tf.global_variables_initializer())
# 텐서보드에서 표시해주기 위한 텐서들을 수집합니다.
merged = tf.summary.merge_all()
# 저장할 그래프와 텐서값들을 저장할 디렉토리를 설정합니다.
writer = tf.summary.FileWriter('./logs', sess.graph)
# 이렇게 저장한 로그는, 학습 후 다음의 명령어를 이용해 웹서버를 실행시킨 뒤
# tensorboard --logdir=./logs
# 다음 주소와 웹브라우저를 이용해 텐서보드에서 확인할 수 있습니다.
# http://localhost:6006
# 최적화 진행
for step in range(100):
sess.run(train_op, feed_dict={X: x_data, Y: y_data})
print('Step: %d, ' % sess.run(global_step),
'Cost: %.3f' % sess.run(cost, feed_dict={X: x_data, Y: y_data}))
# 적절한 시점에 저장할 값들을 수집하고 저장합니다.
summary = sess.run(merged, feed_dict={X: x_data, Y: y_data})
writer.add_summary(summary, global_step=sess.run(global_step))
saver.save(sess, './model/dnn.ckpt', global_step=global_step)
#########
# 결과 확인
# 0: 기타 1: 포유류, 2: 조류
######
prediction = tf.argmax(model, 1)
target = tf.argmax(Y, 1)
print('예측값:', sess.run(prediction, feed_dict={X: x_data}))
print('실제값:', sess.run(target, feed_dict={Y: y_data}))
is_correct = tf.equal(prediction, target)
accuracy = tf.reduce_mean(tf.cast(is_correct, tf.float32))
print('정확도: %.2f' % sess.run(accuracy * 100, feed_dict={X: x_data, Y: y_data}))
7. MNIST Dataset by 김**
MNIST는 Modified National Institute of Standards and Technology의 약자로 MNIST 데이터셋은 손으로 쓴 숫자의 정보를 담고있는 정지영상들의 집합이다. 아래 그림과 같이 흰 배경에 검은 글씨만 존재하는 간단한 정지영상이다.
|
https://ko.wikipedia.org/wiki/MNIST_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4 |
MNIST 데이터셋은 기계학습에서 기초적인 학습을 익히는데 많이 사용되며, 효과적이다. 총 6만개의 트레이닝 정지영상 및 라벨과 1만개의 테스트 정지영상 및 라벨로 구성되어있으며 각 정지영상에는 0부터 9까지 한 자리 숫자의 정보만 담겨있으며, 정지영상들은 무작위적인 순서로 섞여있다. 정지영상은 28x28 픽셀 크기의 흑백영상이며 라벨은 0부터 9까지 10종류의 숫자를 나타낸다. 아래 그림은 MNIST의 정지영상들 중 하나이다.
|
https://www.liip.ch/en/blog/numbers-recognition-mnist-on-an-iphone-with-coreml-from-a-to-z |
MNIST 데이터셋의 파일은 정지영상파일과 라벨파일두가지 각각 트레이닝셋과 테스트셋으로 총 4가지의 파일이 있다. 각 파일에 담겨있는 데이터의 형식은 다음과 같다
(http://yann.lecun.com/exdb/mnist/).
정지영상파일의 경우 제일처음, 바이트 오프셋 0에는 32bit integer, 0x00000803의 magic number 데이터가 들어가 있다. 그 다음 오프셋 4에 32bit integer, 60000 또는 10000의 정보가 있는데, 이는 정지영상의 개수로, 트레이닝셋의 경우 60000, 테스트셋의 경우 10000이 들어있다. 그다음 오프셋 8과 12에 각각 행과 열의 개수를 나타내는 32bit integer가 들어있으며 그 값은 둘 다 28로 같다. 그 다음 오프셋 16부터는 1바이트씩 정지영상의 정보가 담겨있다. 1픽셀당 1바이트가 할당되었으며 그 값은 0부터 255까지이다. 0일 때 흰색, 255일 때 검은색이다. 위 그림에서는 255가 흰색으로 표현됐는데, 이는 영상출력 방법의 차이에서 기인한 색반전이다. 보통의 영상의 경우 그림처럼 0이 검은색, 255가 흰색이 맞다. 또한 정지영상에서 픽셀의 순서는 행 방향을 따른다. 즉, 29번째 데이터는 2행1열의 픽셀값이다.
라벨파일의 경우 제일처음, 바이트 오프셋 0에는 32bit integer, 0x00000801의 magic number를 나타내며, 그 다음 오프셋 4에 32bit integer, 60000만 또는 10000의 정보가 있는데 이는 정지영상파일의 것과 의미하는 바가 동일하다. 그리고 나서 바로 오프셋 8부터 바로 매 바이트마다 라벨 정보가 있는데, unsigned byte 형식으로 0부터 9까지의 수를 나타낸다.
이 MNIST 데이터를 불러다 쓰기 위해서는 다음과 같은 명령어를 사용 해 주면 된다.
from tensorflow.examples.tutorials.mnist import input_data |
위 명령어는 텐서플로우의 여러 데이터셋 중에서 mnist를 다운로드하여 추가해주는 명령어이다. 텐서플로우는 mnist를 포함하여 audio, image, object_detection, structrued, smmarization, text, translate, video의 카테고리에서 많은 데이터셋을 제공한다
(https://www.tensorflow.org/datasets/catalog/overview?hl=ko).
◆ Final comment (Project 를 마치고 ...)
팀원들이 수행한 역할:
박** - 동기, 텐서플로우의 이론적 배경, 텐서플로우를 사용해 상수, 변수를 만들고 계산하는 방법에 대해 설명하였음.
정** - 텐서플로우의 설치법, Tensorboard, Saver를 사용해 텐서플로우 학습 로그를 한눈에 보고 저장하는 법에 대해 설명하였음.
홍** - 텐서플로우를 이용해 신경망을 구성하는 방법에 대해 설명하였음.
김** - MNIST 데이터셋이 무엇인지, 텐서플로우에서 이 데이터셋을 어떻게 활용할 수 있는지 설명하였음.
Ch 5장. [5 pt] After your PBL (PBL보고서를 마치고)
◆ Final comment after your report ◆
(PBL보고서/Project 를 마치고 ...)
1st Month:
PBL보고서를 처음으로 쓰게 되어 좀 미숙한 것 같다. 특히 PBL보고서를 쓰다 보니 질의응답에 너무 참여하지 않았다는 것을 느끼고, 좀 더 적극적으로 참여해야겠다고 느끼게 되었다. 이상구 교수님의 학습법은 적극적인 참여를 유도하고 있고, 적극적으로 참여하면 실력이 향상될 수밖에 없는 구조라고 느끼게 되었다. 앞으로는 열심히 해야겠다고 다짐하게 되었다.
처음 코딩을 알게 되고 머신 러닝이라는 분야에 관심을 가지게 되었을 땐, 수학의 필요성도 못 느꼈고 그저 사용하는 방법만 배우면 된다고 생각했다. 주변 사람들도 그렇게 생각하는 사람이 많았다.
하지만 실제 이 수업을 통해 수학을 배우고 또 코딩을 배우며 작동해가면서 느꼈던 점은 컴퓨터의 알고리즘에도 한계점이 존재한다는 것이다. 직관적 영역에서 찾아낼 수 있는 답과 알고리즘을 통해 구한 답과의 큰 차이가 있을 수 있다는 것을 인지함으로써, 기초수학과 알고리즘의 작동환경의 공부에 대한 중요성을 체감할 수 있었다.
당장 기억나는 내용으로도 QR분해 알고리즘의 조건은 행렬 A가 full rank column이였고, 직교대각화 해주는 알고리즘을 쓰기 위해서는 행렬 A는 대칭행렬이여야만 했다. 이런 것들을 모르고 그저 알고리즘을 다룬다면 원인모를 오류나 혹은 실제 정답과는 뒤떨어진 결과를 얻을 뿐일 것이다. 이런 모든 것들은 기초 수학에 대한 지식과 알고리즘의 작동환경에 대한 충분한 공부가 선행되면 해결할 수 있는 것이다.
Mid Term:
2번째 달은 여러모로 적응기였다고 생각한다. mid_PBL Report를 쓰기위해 내가 작성한 글뿐 아니라 다른사람이 Finalize한 게시글도 참고하면서 [Finalize]의 형식을 세울 수 있었다.
게시글을 올리는 것, 코멘트를 다는 것에 대한 막연한 두려움 역시 많이 걷혀졌다. 수학을 전공을 한 것도 아니고 컴퓨터 공학을 전공을 한 것도 아닌 나는 내가 가지고 있는 지식에 대한 확신이 없었던 것 같다. 그래서인지 어떤 질문에 대한 코멘트를 달려고 해도, 이게 맞는 것일까? 틀리면 어떡하지? 걱정만 앞서서는 결국 뒤로가기 버튼을 누르고 있었다. 이런 상황도 지식공유과정(게시글을 이용한)이 어느정도 궤도를 타니 많이 바뀌었음을 느꼈다. 새로운 지식 생산자의 위치가 되면 좋겠지만 그럴 능력이 부족하기 때문에 새롭게 생성된 지식을 가공하고 정리하는 위치에서 맡은 바 역할을 하는 것 역시 그룹 내에서 지식의 흐름을 고이지 않게 해준다는 것을 깨달았다. 그 위치에서 새로운 지식을 계속 습득하고 가공하다보면 어느순간 나 역시 지식의 생산자 위치에 서있을 수 있겠다는 생각이 들었다.
어느덧 두 번째 PBL보고서를 쓰는 시간이 되었습니다. 교수님의 피드백을 통해 보고서 작성 시간도 굉장히 단축되었다. 그 동안 선형대수학을 공부하고 그에 대한 궁금한 점을 질문하여 같은 수업을 듣는 분들과 교수님의 답변을 받으며 궁금증을 해소하였습니다. 지식을 스스로 공부해보고, 그러다가 궁금한 내용이 생겨서 물어보았을 때 저 혼자만이 찾았던 정보보다 더 많은 정보를 얻을 수 있는 것이 상당히 좋았습니다. 질문에 대해 매우 열린 분위기가 조성되어 있어 부담 없이 질문을 할 수 있는 점이 좋았습니다. 또한, 이러한 과정을 통해 다른 사람들과 질문과 답변을 하는 것이 현재 추세에 맞으며, 공부의 본질에 다가가고 있다는 느낌을 받았습니다. 그러나 첫 번째 PBL을 쓰고 나서 좀 더 열심히 활동에 참여해야겠다고 다짐을 하였으나 그렇게 열심히 질문하고, 답변을 하지는 못한 게 아쉽습니다. 다른 과목의 과제에 힘쓰느라 질문과 답변을 성실히 하지 못한 점을 반성하고, 미리미리 해야겠다고 느끼게 되었습니다. 다들 열심히 하는 모습을 보며 저 자신을 계발하며 열심히 살아야겠다는 생각이 들었습니다.
기술 강국이 되기 위한 조언 중에 ‘Fast fallower 스탠스에서 벗어나 One and only leader가 되려는 자세가 필요하다’라는 말을 읽은 적이 있습니다. 이 말은 교육에도 적용된다고 생각합니다. 20세기 공장식 주입교육에서 벗어나, 자기 자신이 자신의 학습상태를 확인하고, 목표를 잡아, 집단과 상호작용하며, 단지 ‘안다고 생각하고 넘어가는’ 것에서 벗어나 ‘자신이 아는 것을 정확히 알고 다음 step으로 넘어가는’ 학습을 해야 할 것입니다. 우리에겐 그런 학습이 필요합니다. 그리고 그런 학습을 교수님의 “인공지능을 위한 기초수학”에서 체험할 수 있었습니다. 자신이 모르는 것을 질문하고, 서로 문답하며, 토론하는 수업. 이 정도의 수학 수준에서 새로 얻을게 있을까 솔직히 고민했었습니다, 하지만, 제가 얻을 수 있었던 것들은 제 생각을 뛰어넘었습니다. 구체적으로, sage 코딩, 헤시안, 주축정리, 개념으로서의 AI 지식이 아닌 프로그래밍과 방법으로서의 AI, 생각해보지도, 질문해보지도 못한 다양한 개념 질문들… 그 중에서도 특히나 sage에 대해서는, 제가 몇 년 전에 다른 수학 수업에서 그것을 접할 수 있었습니다. 그때는 당시 교수님께서 visual을 보여주기 위해 수업시간에 잠깐 트는 것에 지나지 않았습니다. 하지만, 이번 학습을 통해 배우고 또 활용하고 나니, 제가 활용할 수 있었던 프로그램인 Mathematica 보다 훨씬 간편하며 응용이 쉽다는 것에 놀랐습니다. 그 때 좀 더 많이 알 수 있었더라면 좋았을 텐데요…
그리고 또한 학생 참여를 통해 제가 모르는 분야의 다양한 지식을 접할 수 있었습니다. 교수님께서 계속 업데이트하시는 여러 정보와 최신 뉴스 외에도, 다른 학우들의 참여가 열렬해서 그랬다고 생각합니다. 특히 수강인원의 전공이 다양해서 더욱 그럴지도 모르겠습니다.
질답 및 토론의 참여를 통해 얻을 수 있었던 것들 중, 특히 제가 알고 있는 것들을 나누는 데서 나오는 기쁨을 빼놓을 수 없겠군요. 거기에 더해 제가 ‘알고 있다고 생각하는 것들’이 정확한지 다시 한번 검토하고, 서칭하고, 레퍼런스를 찾으면서 새로 배우거나 오류를 정정하며 얻는 것들 또한 굉장히 컸습니다. 그에 따라오는 질문들에 답변하면서, 대강 아는 지식들이 단단해지는 것이 느껴질 정도였습니다. 아직 나누고 싶은 것도 많고, 질문하고 싶은 것도 많습니다. 앞으로도 수업에 적극적으로 참여할 것입니다. 얻는 게 눈에 보이니까요.
3rd Month:
3번째로 PBL 보고서를 쓰게 되었습니다. 처음에는 이 인공지능 강좌의 수업 방식에 대해 의심을 하기도 했고, 그동안의 과정과 색달라서 열심히 활동에 참여하지 않았습니다. 그래도 13주차 정도가 이런 교육 과정에 어느 정도 적응을 할 수 있었습니다. 물론 아직 매우 열심히 활동하는 것은 아니고, 글을 올리는 것도 몰아서 하는 경향이 있지만, 전보다는 많은 참여를 하고 있다는 것이 느껴집니다. 이러한 참여를 하면서 이런 방식이 확실히 도움이 된다는 것을 느끼게 되었습니다. 질문을 올리고 답변을 받으며, 궁금증을 해결하는 것은 혼자서 해결하려고 하는 것보다 질문이 정리되는 과정에서 이해가 더 잘 되었습니다. 또한, 혼자서 찾기에는 너무 방대한 양의 자료들을 수업을 같이 듣는 분들께서 정리된 내용을 올려주고 하는 것은 매우 효율적이라고 생각합니다. 그동안 이 수업에 매우 열심히 참여하지는 않았지만, 그래도 인공지능에 필요한 기초수학을 선형대수학, 미적분학, 통계학, 팀 프로젝트를 하며 인공지능에 대해 배우며 지식이 늘어나 있다는 것에 기쁩니다. 이상구 교수님의 말씀대로 필요한 인재가 되기 위해 이 수업이 끝나도 부단히 노력해야겠다는 생각이 들었습니다. class 내부의 지식 커뮤니티에 적응이 되고 난 뒤, 지식 가공자의 입장에 서서 활동을 한 달인 것 같다.
스스로 판단하기에 아직 새로운 지식을 생산하기에는 부족하다고 생각했다. 좀 더 advanced 내용을 다룬 다른 학우들의 지식들을 따라가기도 버거웠던 것 같다. 그래서 교제의 R언어를 이용한 통계파트의 내용 중 중요한 부분을 정리해보고 관련된 실습예제를 제시함으로써 이해를 돕는 revised된 자료를 생성해보는 것에 집중했다. 솔직히 내가 한 활동이 클래스 내에서 지식의 순환에 얼마나 큰 기여가 됬는지는 잘 모르겠지만, 확실한 것은, 내가 재가공하고 revised한 자료에 대해서 나의 학습도는 매우 높다는 것이다. 배움의 가장 큰 단계가 남에게 쉽게 설명해 주는 단계라고 하더라. ‘R언어-복습’ 자료를 최대한 다른 사람이 이해가 잘 되었으면 하는 입장에서 만들었다. 그러기 위해서 아마 나도 모르게 가장 높은 학습의 단계를 쫓았던 것 같다. 학습이 패러다임이 왜 이쪽으로 넘어왔는지 조금 깨달았다. 학습과 동시에 생산의 과정을 거치면서 스스로는 가장 높은 학습의 단계를 밟고, 생산된 지식이 또 다른 지식을 생산하면서 상생하게 된다는 것을 어느 순간 이해하게 되었다.
4장에서 AI에 대해 공부하면서 지금까지 공부한 수학적 지식들을 활용할 수 있게 되어 지금까지 공부해온 내용들이 더욱 의미 있게 다가오는 시간이었습니다. 특히 통계학과 R언어를 사용한 통계처리방법을 통해 큰 데이터를 쉽게 다루는 방법을 알게 되어 뜻깊었습니다. 또한 지금까지 배운 내용들이 하나로 합쳐지는 단계인 것 같아 깨닫게 되는 것도 많은 시간이었습니다. 이번 PBL 보고서를 작성하면서 수학적 개념을 이해한 다음 코드로 수학문제를 해결하는 과정이 기존의 수학교육을 바꿀 수 있는 좋은 방법이라는 것을 느꼈습니다. 또 본격적으로 팀 프로젝트를 시작하게 되었는데 의미 있는 결과를 얻을 수 있도록 노력하겠습니다.
Last Month (Final):
PBL 레포트 정리는 지금까지 해 온 것에 조금씩 추가하는 형태라 그다지 어렵지 않게 끝낼 수 있었습니다. 교수님과 했던 면담에 대해 써보고자 한다. 교수님과 면담하면서 느꼈던 것은 시야가 다르다는 것이었다. 나의 비교대상은 언제나 내 친구였고 내 옆의 학우들이였다. 하지만 교수님이 보는 경쟁자들, 협업자들은 외국의 대학생들 좀 더 프로페셔널한 직업군들이었다. 보는 위치가 달라서였을까? 목표점이 훨씬 우아했고 그 방향성은 명확했고 실천력은 본받아 마땅했다. 그리고 이제라도 그것을 깨달아서 다행이라고 나는 생각한다. 본격적으로 빅 데이터와 인공지능에 대해 배우면서 그동안 배워온 수학(선형대수, 미적분, 확률)이 실제로 어떻게 쓰이는지를 알게 되었다. 먼저 기초를 배우고 이후에 응용 방법을 배우는 것은 대부분의 과목이 동일하다. 하지만 그동안의 수학 과목에서는 기초를 다지는 방법이 책에 나온 문제풀이 밖에 없었다. 그런데 이번 강의에서는 sage나 기타 프로그램으로 코딩과 함께 배우니까 지루하지도 않고 개념을 더 잘 이해할 수 있었다. 수업 이외의 부분에서는 Midterm PBL 발표 때 교수님이 말씀해주신 보완점(정의에 필요한 수식을 적어 넣기 보다는 교재 활용하기 등)들을 바탕으로 보고서를 더 깔끔하게 쓸 수 있게 되었다. 또, 팀 프로젝트 초안 발표 이후 교수님의 조언을 듣고 원래 계획보다 단순하지만 실용성은 여전히 뛰어난 프로그램을 어느 정도까지는 완성하였다.
특별히 기억에 남는 것은 PCA입니다. 다른 AI 프로젝트를 진행할 때, 데이터셋이 이미 PCA되어 차원이 축소된 채로 들어왔는데, 교수님과 다른 친구들이 PCA에 대해 이야기하는데 저만 몰랐습니다. 후에 자료를 찾아봐도 수학적인 내용이라 이해가 잘 되지 않았습니다. 인공지능 수업에서 PCA를 듣고 이제야 이해할 수 있었습니다. 그래도 항상 머릿속으로만 생각하던 이상적 수학적 배움의 경험을, 이렇게 직접 실행하고 경험해볼 수 있으니 정말 행운이었다. 해당 수업을 물리과 후배들에게 적극적으로 추천할 예정이다. 많은 이들이 꼭 들어야하는 머스트 수업임을 나는 자부할 수 있다.
그동안 여러 숙제에 치이며 한 학기를 보내다보니 마지막 PBL보고서를 쓰게 되었습니다. 그동안 첫 번째 달에는 part1의 선형대수학에 대해 배우고, 두 번째 달에는 part2의 다변수 미적분학(미적분학2)의 내용을 배웠습니다. 그리고 세 번째 달에는 part3의 통계학에 관련된 내용을 배우고, 마지막으로 part4의 빅데이터와 인공지능에 관한 내용을 배웠습니다.
그동안 기초수학을 배운 후 마지막으로 인공 신경망을 배우면서 sigmoid같은 활성화 함수와 오차 역전파법에서 경사하강법 같은 수학적 지식이 인공지능에 쓰이는 것을 이해할 수 있었습니다. 수학적 지식이 없었다면, 인공신경망의 작동 원리에 대해 제대로 된 이해를 할 수 없었을 것이기 때문에 그동안의 과정에 뿌듯함을 느끼고 있습니다. 뿐만 아니라 주성분분석(PCA)에 관한 내용을 다룰 때 선형대수학의 내용과 더불어 통계학의 공분산 행렬이 나오기 때문에, 앞서 배운 내용이 있어서 이해를 할 수 있었습니다. 그동안 교수님의 학습 과정에 있어서 깊은 이해는 하지 못한 부분이 있지만, 그래도 어떤 내용인지는 알고 어떻게 쓰는 것인지 까지는 파악을 하였기 때문에 가능했다고 생각합니다. 교수님의 학습 방식은 여러 지식을 알려주어 보는 눈을 넓혀 준다는 점에서 좋은 것 같습니다.
수업 커리큘럼 외의 활동인 팀 프로젝트를 통해서도 지식이 꽤 늘어나게 되었습니다. 처음에 Team2에 들어가게 되어 ‘인공지능 학습 도구 개발’이라는 주제로 프로젝트를 진행하게 되었을 때 좀 막막하다고 느꼈었습니다. 코딩 실력이 부족해 학습 도구로 다룰 내용의 개념 설명을 담당하게 되었지만, 잘 알지도 못하는 인공신경망의 학습과정, FC layer 구성 및 학습, MNIST 데이터셋, CIFAR-10 데이터 셋, CNN, 주성분분석(PCA)에 관한 내용을 작성해야 했기 때문입니다. 어찌 됐든 인터넷과 이상구 교수님의 교안에서 찾아보며 개념 설명을 작성하는 과정에서 정확히는 아니어도 대략적인 개념을 알게 되었습니다. 이렇게 알게 된 내용을 QnA에 올리면 김두영 팀장님이 댓글로 틀린 부분을 지적해주고, FC layer에 대한 내용을 finalize 해주면서 오개념을 바로잡으며 지식을 늘릴 수 있었습니다. 난해하기도 했지만, 결국 인공지능에 대한 지식을 늘릴 수 있어서 이번 팀 프로젝트가 상당히 좋은 기회였다고 생각합니다. 물론 팀 프로젝트를 통해 지식이 늘어나게 된 것은 인공지능에 대해 잘 알고 있고, 잘 알려주는 팀장님을 잘 만난 것이 크게 작용한다고 생각합니다. 새로운 방식의 학습을 통해 많이 깨닫고 가는 시간이 되었던 거 같습니다.
결론적으로 꽤 바쁘게 보낸 한 학기였지만, 이 수업을 듣기 전에 비해 이 수업을 들은 후 알게 된 내용이 많아졌다는 것은 확실합니다. 많은 내용을 간단히 다루며 활용을 중심에 둔 수업과 더불어 팀장님을 잘 만난 팀 프로젝트 활동은 저에게 지식의 확장을 가져다주었습니다. 이런 기회를 제공해 주신 이상구 교수님께 감사의 말을 드리고 싶다는 내용을 적으며 마무리하겠습니다.
발표를 하면서 그동안의 활동을 돌아볼 수 있어서 좋았습니다. 발표를 준비하는 과정에서 그동안의 활동들을 살펴보고, 배웠던 내용들을 다시 공부하며 배웠던 내용들을 다시금 정리할 수 있었습니다. 또한, 발표 후 다른 동료 분들의 발표도 들으면서 열심히 활동한 분들도 있고, 좀 미비한 참여를 보인 분들도 있었지만, 그래도 대부분은 각자 이 수업을 통해 더 지식을 확장하고, 프로젝트를 직접해보며 성장한 모습을 보였습니다. 저 또한, 이 수업을 통해 교수님의 교안에 있는 수학 지식을 익히고, 직접 코딩을 실행해보고, 프로젝트를 하면서 성장할 수 있었습니다. 앞으로 이 수업에서 배운 동료들과의 협업, 모르는 것을 적극적으로 동료 분들에게 질문을 하며 알아가는 것들을 꾸준히 해 나가야겠다고 다짐하게 되었습니다. 이를 통해서 교수님께서 말씀하신 새로운 지식을 생산하는 사람이 될 수준에 도달하기까지 노력해야겠다고 생각하게 되었습니다. 저에게 인공지능을 위한 수학적 지식을 비롯한 새로운 가치관과 나아가야할 방향을 제시해준 이 수업, 그리고 이 수업을 진행하신 교수님께 다시 한 번 감사함을 느끼며, 이 보고서를 마무리 하도록 하겠습니다. 새로운 방식의 학습을 통해 많이 깨닫고 가는 시간이 되었던 것 같습니다. 특히 전자교재의 활용이 익숙해져서 모르는 부분이나 참조하고 싶은 부분들을 쉽게 찾아내어 활용할 수 있었습니다.
이번 한 학기 인공지능을 위한 기초수학을 수강하면서 배운 것 중에 가장 의미있는 것은 인공지능은 수학적 기초위에 작동하는 이성적인 메소드이며 그것을 제어하는 것이 어려운 일이 아니다라는 것이었습니다. 또 인공지능 뿐만 아니라 이번 한 학기동안 프로그래밍을 통한 처음 접해보는 방법으로 수학을 공부해보았는데 처음에는 이런 방법이 정말 수학적인 이해를 도울 수 있을 지 확신이 들지 않았지만 실제로 공부해보면서 활용해보는 것 만큼 이해를 도와주는 것이 없다는 것을 느꼈고 실제로 정말 유효한 방법이라는 것을 알게 되었습니다. 수학교육의 방향성이 이처럼 바뀌어 가면 좋겠다고 생각합니다. 마지막으로 문의게시판을 활용한 능동적인 참여를 요구하는 학습방식이 처음에는 생소하고 어려웠지만 한 학기가 지나고 보니 그만큼 배우게 되는 것도 많았다는 것을 느낄 수 있었습니다.
[The End]
Copyright @ 2020 SKKU Matrix Lab. All rights reserved.
Made by Manager: Prof. Sang-Gu Lee and Dr. Jae Hwa Lee
*This research was supported by Basic Science Research Program through the National Research Foundation of Korea (NRF) funded by the Ministry of Education (2017R1D1A1B03035865).