당장 제가 머신러닝을 처음 배울 때, 악명높은 수업을 들었는데 교수님이 무작정 머신러닝을 활용해서 결과물을 내라고 하셨습니다. ( 아무설명 없이!) 그 덕에, 정말 많은 고민을 하고 있던 찰나 대학원생분께서 다양한 데이터셋 사이트를 알려주셨습니다. 그 중 하나가 Kaggle 이었는데요. 그때부터 kaggle을 알게 되었습니다. Kaggle 은 단순히 데이터 셋 뿐만 아니라 다양한 대회와 교류의 장이기도 한데요, kaggle을 이용해서 머신러닝관련 국제 대회 경력도 쌓을 수 있기에 관심이 있다면 정말 괜찮은 사이트입니다.
다음과 같은 메뉴로 competition에서는 현재 열리고 있는 대회를
Datasets에서는 수많은 좋은 데이터셋을 구할 수 있습니다.
Code에서는 다른 사용자가 작성한 코드를 볼 수 있습니다.
Discussions에서는 다른 사람과 의견을 공유할 수 있으며,
learn 에서는 기초 내용을 학습할 수 있습니다.
관심있는 분들은 캐글에 들어가서 실력을 키우는 것을 추천드립니다. 저 또한 연습해서 실력을 키워보도록 하겠습니다.
1. 머신러닝 회귀와 분류 2. 회귀 모델 3. 분류 모델 4. 데이터 인코딩/ 피처스케일링/ 교차검증 5. 주요 머신러닝 모델 소개
< 딥러닝 >
1. 그래프 모델 개념 및 신경망 기본 구조 소개 2. 전방향 연산, 가중치 초기화, 배치 기반 연산학습. Regularization 기본 개념 3. 신경망에서 학습의 의미, 역전파 기본 개념 및 chain Rule 을 이용한 학습 4. RBM 구축 과정, 수학이론, 구현 연습 5. CNN 개념<< 현위치 6. 다양한 딥러닝 모델 소개
그동안 전통적인 프로그램이 Rules, Data 를 통해 Answer 을 출력하는 과정이었다면 ( 예를 들어 2*x=y 와 x의 값들을 주면 y값이 출력됩니다 )
머신 러닝은 Answers와 Data를 통해 Rules를 출력하는 과정입니다.
그럼 Rules를 찾는 방법은 무엇일까요? 그 중 하나가 CNN 방식입니다.
CNN이란?
Convolutional Neural Network 의 약자로 기존 Neural Network는 1차원으로 변경 후 넣어주어야 하므로, 공간정보가 손실되었습니다.
그러나 CNN같은 경우 convolution 연산을 통해 공간 정보를 보존 가능하게 학습 시킬 수 있게 됩니다.
convoultion 연산은 신호 및 시스템이나 공학수학에서 필수적으로 다루는 개념이니 검색해보시길 바랍니다. 시간이 되면 따로 정리해보겠습니다.
ex) 그림과 같이 INPUT 그림을 생각해보면 각 픽셀의 공간적 위치에 따라 A가 정해집니다. 그러나 기존 Neural Network ( 즉 Deep Neural Network는 이를 그저 1차원의 쭉 기다란 배열로 바꾸게 되므로 공간정보를 담지 못합니다. Convolution Neural network는 Convolution이라는 연산을 통해 공간적인 특징까지 담을 수 있게 되는 것입니다.
CNN의 원리
raw 이미지와 conv 연산을 통해 feature map을 생성합니다.
다음과 같이 이미지는 숫자로 이루어져 있습니다. 예를 들면 RGB 3가지로 한 픽셀을 나타낼 수 있습니다, (255,0,0) 이와 같이 각 픽셀마다 색깔을 숫자로 변경할 수 있습니다.
그 숫자들을 위와 같은 방식처럼 필터라는것을 이용해서 숫자들을 곱해줍니다. 여기서는 3*3 필터를 사용했습니다. 그럼 특정부분은 강화되서 보이고 특정부분은 약화되서 보입니다.
여기서 필터가 움직이는 간격을stride라고 하는데 위에서 stride는 1이 됩니다. 1칸씩 움직이니까요.
여기서 문제가 생깁니다.
convoultion 방식으로 계산을 하게 되면, map 이 계속해서 작아지게 됩니다.
따라서주변에 0을 채워넣는 padding이라는 것이 필요합니다.
3차원의 경우 다음과 같이 계산합니다.
Activation 함수 -feature map을 만든 후, 곧바로 convoultion Layer 에 넣는 것이 아니라 Activation 함수를 거친 후 다음 layer 에 넣어줍니다.이는 parameter 의 overfitting을 억제하고, Data를 비선형으로 바꾸어 정확도를 높입니다. 이 역시 어려운 내용이라 일단 있다고 생각하고 넘어가겠습니다.
계산되면 해당 특징을 잘 나타낼 수 있는 값들만 FC layer (Fully connected) 에 넣기 위해 Pooling을 계산합니다.
pooling layer- 데이터의 공간적인 특성을 유지하면서 크기를 줄여주는 층입니다. 특정위치에서 큰 역할을 하는 특징을 추출하거나, 전체를 대변하는 특징을 추출할 수 있는 장점이 있는 pooling layer 을 사용합니다. 또한 overfitting problem 역시 해결할 수 있습니다
Max Pooling 방식 - 해당 그리드에서 가장 큰 값 이용
Average Pooling 방식 - 각 그리드에 속한 값들의 평균 이용
Fully-connected layer을 통해 평탄화 작업을 거쳐 출력을 냅니다. Flattened 라고 합니다.
그 후 최종으로 softmax 에서 결과값을 출력합니다. 여기서는 하나의 input이 하나의 logits에 들어가야 합니다.
전체적인 과정을 복기하면 이렇습니다. convolution 과 pooling 을 반복하고 fully- connected layer로 평탄화 한 후 softmax를 이용해 결과값을 출력합니다.
이렇게 반복 수행을 통해 weight (가중치) 수행이 조정됩니다. 입력이 어떤 출력이 되도록 weight 값을 조종하는 것을 learning 이라고 하는 것입니다.
이 어려운걸 그냥 전부 코드로 구현하기보다 텐서플로우 같은 도움을 받아 구현하게 됩니다. 머신러닝을 공부하는 동안 차근차근 정리해보겠습니다. 이 게시물 또한 계속해서 수정해서 매끄럽게 다져보겠습니다.
이 부분은 cheng의 전자기학과 미분적분학 8판 책을 참고했습니다. 저희 학부 기준 1학년 2학기에 배우는 기초 내용인데, 전자기학을 공부할 때 첫장에서도 똑같이 복기하면서 공부하게 됩니다. 공간을 해석하기 위해서 필수로 알아야하는 내용이라, 이 부분에서 정확하게 집고 넘어가지 않으면 추후 많이 어렵게 됩니다. 편미분을 안다는 가정 하에 진행하겠습니다.
1. 기울기 벡터
이변수 함수에서 ( z=f(x,y) 와 같이 두 변수로 이루어진 함수 ) 기울기 벡터는 다음과 같이 정의합니다.
이때 이변수 함수란 값이 x, y 두가지 변수에 의해 결정되는 함수 를 뜻합니다.
기울기 Gradient는 벡터의 회전, 벡터의 발산에 있어서 중요한 역할을 합니다.
위 식처럼 벡터로 결과값이 나온다는 사실 또한 잊지말아야 합니다.
기울기 벡터는 곡면( k=f(x,y,z) )이 주어질 때 곡선위에서 한 점에서의 접평면의 법선벡터가 되기도 하고, 접선의 방정식에도 사용됩니다. 지금은 간단하게 어떻게 계산하는 지만 알아둡시다.
2. 이중적분
발그림 죄송합니다 다음과 같은 영역이 있습니다. 그동안 저희가 자주 사용했던 적분은 f(x)로만 구성됐던 적분일 것입니다. 우리는 그동안 x의 영역 a부터 b까지 n만큼 쪼갠 후 f(x)와 곱해 직사각형 형태를 구했습니다. 그리고 전부 합해서 직사각형들의 합으로 만들어진 모양을 얻었죠. 그 이후 오차를 줄이기 위해 n을 무한대로 보내 그 사이 x의 간격을 아주 촘촘하게 바꿨습니다. 그 결과 a부터 b 까지의 적분을 얻을 수 있었습니다.
이중적분의 경우도 크게 다르지 않습니다. 다음 a부터 b까지 c부터 d까지 둘러쌓인 영역을 D라고 해보겠습니다.
이를 잘라본다면 아래와 같은 그림이 될 것입니다.
직사각형이 X 라고 써져있는 것처럼 다음과 같이 직사각형의 모양이 아닌 부분이 존재합니다. 이는, 아까 적분할때 직사각형의 모양에서 오차가 발생한 것과 같습니다. 그럼 어떻게 해야할까요?
이또한, 극한으로 보내주면 됩니다.
다음과 같이 m, n 은 등분 수이며 delta A는 delata x * delata y 입니다.
이를 다음과 같이 표현할 수 있게 됩니다.
dy dx의 차이는 뭘까요?
적분 순서의 차이입니다. dydx의 경우 y의 범위부터 dxdy의 경우 x의 범위부터 계산합니다. 예제를 통해서 보겠습니다.
예제)
이와 같은 문제는 어떻게 풀까요? 적분 안에 있는 함수를 풀기엔 조금 어려워 보입니다. x의 범위를 본다면 x= 3 root y부터 2까지 범위에 해당합니다. 이를 바꾸어 보면 x^3=y ~ x=2 까지 범위라는 것을 알 수 있습니다. y의 범위는 0부터 8까지인데 이를 그려보면
이런 영역에 해당하는 것을 알 수 있습니다. 그렇다면 dx dy를 dydx로 바꾸면 어떻게 될까요? 적분 안에 있는 내용은 변하지 않습니다. 그러나 dy가 먼저 오게 되므로 y의 범위 부터 적을 수 있게 됩니다. y= 0 ~ y=x^3이며 x의 범위는 0부터 2입니다.
이중적분을 이해한다면 나머지 다중적분은 쉽게 이해할 수 있습니다. 이중적분을 활용해서 입체도형의 부피나 겉넓이, 또는 평면의 면적을 쉽게 구할 수 있습니다. 그러나 이는 벡터미적분학의 내용이고 저희가 할 것은 전자기학이므로 이 부분은 넘어가고 다음엔 원기둥좌표계, 구좌표계에서의 적분 변형과 벡터의 회전 발산에 대해 이야기해보겠습니다.
1학년 때는 몰랐던 과목의 흐름을 졸업학년이 다가오니까 그제서야 조금 그 흐름을 알게 되었습니다. 방학때 전공 과목을 정리하기 전에 큰 흐름을 정리하면 좋을 것 같아 먼저 이 게시글을 적습니다.
아마, 저희 학교가 아니더라도 전기전자공학부 학생이라면 비슷할거라고 생각합니다.
전기전자 공학부는 그 범용성이 굉장히 넓습니다. 공학에 있는 모든 과목들과 연계성이 있고 각 과목간의 연계성 역시 큽니다. 이에, 기초 과목이 부실할 경우 심화 과목에서의 부담감이 제곱으로 커집니다. 물론, 타 과도 비슷하겠지만 1학년부터 도서관에서 열심히 공부해야하는 게 최선인것 같습니다. ( 본인은 안해서 이런 글을 적는 것도 있습니다 ㅎㅎ ;) 자신이 어떤 트리를 정하냐에 따라 다르겠지만 다양한 트리의 과목을 듣는 것 역시 중요하고 나중에 취업때도 들었던 과목이 나중에 큰 도움이 된다고 알고 있습니다. 그리고 알아야할게 코딩이 싫다고 다른 트랙을 선택하고 반도체가 싫다고 다른 트랙을 듣기에는 트리 끼리도 연관성이 매우 큽니다.
본인은 RF/집적회로 및 반도체 트랙과 에너지 및 전력전자 전문가 트랙 위주로 탔습니다. 올해에는 통신 및 네트워크 트랙과 전력시스템 트랙도 맛보기 합니다. 제가 들은 과목 위주로 이야기하겠습니다.
* <1학년> 1학년에서 가장 중요한 과목은 선형대수학과 벡터미적분학 컴퓨터 프로그래밍 1 입니다. 물리나 화학을 들어본 적이 없다면 물리, 화학 분야도 열심히 듣는걸 추천합니다.
벡터미적분학에서 편미분 계산은 곧 전자기학에서 가장 중요한 식들로 연결됩니다. 공학수학에서 한번 더 다듬긴 하지만 그럼에도 여기서 개념을 확실하게 거쳐야 전자기학 더 넘어서 다른 전기전자 수업까지 지장이 없습니다. 복학하고 나서 전자기학을 듣는데 편미분을 아예 까먹어 다시 복기했던 기억이 납니다.
컴퓨터 프로그래밍 1은 학교마다 다르겠지만 C 언어의 기초를 배우는 것으로 알고 있습니다. C언어는 저희 학과에서 가장 중요한 언어라고 이야기할 수 있습니다. 마이크로 프로세서 같이 각종 레지스터를 다루는 과정에서 파이썬보다 C언어가 압도적으로 하드웨어 제어에 탁월하고 모든 수업에서 C언어를 기본적으로 사용하게 됩니다. C언어는 빡세게 다루면 다시 복기하는 과정이 빠르므로 열심히 해두는 것을 추천합니다.
선형대수학은 과학의 가장 기초가 되는 학문입니다. 타학교 물리학부 인턴에 갔을 때도 선형대수학은 기본으로 알아야 했고 코딩에서조차 선형대수가 기초가 됩니다.
* <2학년> 생각해보면 모든 과목이 다 중요합니다. 죄송합니다
회로이론 모든 전기전자 과목에서 필수인 과목입니다. 이 과목을 제대로 공부안한다면 정말정말 힘듭니다. 또한 이 과목의 수강은 좋은 교수님에게 듣는 것을 추천드립니다.
공학 수학은 처음에는 편미분의 연산 그 후에는 라플라스 연산을 배울텐데 라플라스 연산 역시 모든 과목에서 필수입니다. 어떤 과목을 배우던 라플라스 연산을 쓰지 않는 곳이 없습니다. 코딩할때도 사용합니다.
신호및 시스템 또한, 그렇습니다. 기본적인 신호를 해석하는 과정을 배우는데 특히 전력전자에서 정말 중요한 개념으로 사용됩니다.
논리회로 논리 회로 역시 회로를 이용해 논리적인 연산자를 구현하는 과목입니다. 컴퓨터 구조와 연결되어있는 감이 있고 전자회로와도 연결되어있습니다.
전자기학은 회로이론 처럼 전기전자공학부의 꽃입니다. 특히 전기과 학생이라면 필수적으로 알아야합니다. 전기자기적 현상을 수학적으로 분석하는 학문입니다. 오래된 전기 역사와도 연관되어 있고 제가 다시 전기전자학문에 흥미를 가지게 만들어준 학문입니다. * 그와 별개로 난이도는 굉장히 어렵습니다.
전자회로 전자기학이 전기과의 꽃이라면 전자의 꽃은 전자회로입니다. 이 부분을 설렁설렁 넘어간다면 어느 과목이던 정말 고생할것입니다. 회로의 특징을 분석하고 사용하는 모든 기기의 회로 동작을 어렴풋이 알 수 있을 것입니다.
교류회로이론은 전기과라면 무조건 들어야할 과목 중 하나입니다. 직류를 다루는 원래 과목들과 달리 교류를 다루게 되면 조금더 복잡해지는 감이 있는데 교류 회로 이론은 교류와 직류를 넘나드며 회로를 분석합니다.
컴퓨터구조는 컴퓨터에 대한 근본적인 이해와 어셈블리어에 대해서 배웁니다. 저는 정말 어려웠지만 이 과목 역시 임베디드와 전자 특히 컴퓨터 쪽으로 가고 싶은 학생에게 필수 과목인 것 같습니다.
<3학년> 3학년 과목은 트랙 위주로 설명하겠습니다.
제어공학: 공대생이 필수로 알아야할 과목이라 넣었습니다. 모든 공학적인 요소에는 제어가 필수적입니다. 제어공학정도는 필수로 듣는 것을 추천합니다.
* 에너지 및 전력전자 트랙 (전력전자)
전기기기(3-1,3-2) - 전력전자(3-2 최근 3-1로 변경) - 마이크로프로세서 응용 (3-2) 전기기기는 변압기, 유도전동기, 동기전동기, 직류기등 다양한 전기기기의 동작원리를 공부합니다. 전자기학을 바탕으로 지구상에 없어서는 안될 모터분야를 상세하게 배웁니다. 저 역시 전기기기 수업을 듣고 전기과에 가기로 마음 먹은 것 같습니다.
전력전자는 말그대로 전력전자에 대해 배웁니다. DC AC를 자유자재로 변환하며 여러 컨버터에 대해 배웁니다. MATLAB 실습을 하고 실습시간에는 직접 납땜하며 제작하며 돌려보았습니다. 3상 인버터등 여러가지에 대해 배우는데 이 학문 역시 트랙에서 필수적인 트랙인 것 같습니다.
마이크로프로세서 응용: 저희 학부같은 경우 1학기는 전자 2학기는 전기 과목으로 마이크로프로세서 응용이 열리는데 저는 전기과의 마이크로프로세서 응용을 들었습니다. 마이크로프로세서가 어떻게 동작하고 코딩을 하고 동작하는 과정을 진행합니다. 이 과목도 핵심 과목중 하나인 것 같습니다.
* RF/집적회로 및 반도체 트랙 ( 반도체 ) 반도체 물성(3-1) - 반도체 공학 (3-2) 반도체에 핵심이 되는 과목입니다. 이 과목으로 반도체에 조금은 알았다고 할 수 있습니다. 화학적인 상식도 필요하고 근본적으로 반도체가 어떻게 동작하는지 하나하나 알려주는 과목입니다. 수학적으로 해석하는 과정도 재미있고, 반도체가 무엇인지 알고 싶다면 꼭 꼭 들어야합니다.
* 전력 시스템 및 전력경제 전문가 트랙 (전력) 전력전송공학(3-1) - 전력시스템 공학(3-2) 저는 듣지 않았던 전력전송입니다. 넓게 보면 전력 시스템과 관련 있는 과목인데 전기기기와 비슷한 부분이 있어 내년에 들으려고 합니다.
4학년은 스킵하겠습니다. 어쨌거나 저는 에너지 및 전력전자 트랙분야가 중심이기 때문에 벡터 기본내용 - 회로이론(전자회로) - 전자기학- 전기기기 위주로 정리할까 합니다. 어느정도 간결하게 적었는데 혹시 긴 설명이 필요하면 댓글 남겨 주시면 제가 열심히 정리해서 적어보겠습니다.