ML 유형

  * 지도학습: 분류, 회기 (예측), 이미지 분할, 음성인식, 언어 번역

  * 비지도학습: 데이터에 label이 없어 Clustering (그룹화) 및 차원축소 등의 방법으로 Data를 이해함.

  * 강화학습: opentutorials.org/course/4548/28949

 

강화학습 Reinforcement Learning - 생활코딩

 

opentutorials.org

 

Model Evaluation

1) 데이터 셋을 학습 데이터셋 (learning) / 검증 데이터셋 (hyper-param 튜닝) / 테스트 데이터셋 (성능 측정)으로 나눔

2) ML의 변수

  - 가중치: optimizer에 의해 변경 or 역전파 과정 튜닝

  - Hyper-param: 아키텍쳐의 형태 (Layer 수, Learning rate), 구성, 동작 방식을 결정하는 변수로 주로 수동으로 변경해야 함

3) Overfitting / Underfitting: 학습 데이터셋에서는 잘 작동하지만, 검증과 테스트셋에서는 잘 작동안하는 경우 일반화 능력이 떨어지므로 overfitting이고, 그 반대의 경우는 underfittng. 이런 문제를 해결하기 위해 Holdout dataset, k-fold 검증, 반복 k-fold 검증 방법을 사용함. 예를 들어 k-fold 검증은 test dataset을 여러개로 나누고 1개를 검즈으로 번갈아가며 사용한 뒤에 평균값으로 판단하는 방법임. 추가적으로 상황에 따라 데이터 혼합 방법을 사용하기도 함. 

* 데이터 혼합 시 유의해야할 점!!

  - 데이터 표현력: 한쪽에 치중되지 않게 임의의 순서로 섞거나 층화 추도법(stratified sampling) 사용

  - 시간 민감도: 순서 정보가 있다면 도메인 지식을 기반으로 기준 설정해주어야 함

  - 데이터 중복: 일반화가 잘 안될수도 있음

 

Data Preprocessing & Feature Engineering

1) Data Preprocessing

  - Vectorization: Data를 Pytorch Tensor 형태로 변환

  - Normalization: Data 특성을 평균을 0, 표준편차 1로 만들어 정규화하여 더 빠른 학습과 성능 효과가 있을 수 있음. MinMaxScaler 함수를 사용하여 정규화를 할 수 있음

  - Missing value: 도메인 별로 해결방법이 다름 (숫자 대체, 예측 등)

2) Feature Engineering : 도메인 지식 base로 model에 전달할 새로운 변수 및 feature를 만들어 내는 것. 데이터가 부족하다면 feature engineering 이 도움이 될 수 있음.

 

Overfitting & Underfitting 대처법

1) Overfitting: 학습 데이터셋을 완전 암기한 상태로 noise까지 학습해버려서 오히려 새 Data 및 검증 데이터셋에 성능이 안나오는 현상, 단순한 model로 만들어서 해결함

 - 더 많은 데이터 확보: 특정 패턴보단 일반 패턴을 학습할 수 있는 데이터를 확보하고, 더 구할수 없을 땐 데이터 도메인 이해 하에 Data Augmentation (회전, 자름 등)을 이용할 수도 있음

 - 네트워크 크기 줄이기 (선형 Layer수, 가중치수)

 - 가중치 규제 적용: Network가 가중차기 큰 값을 갖지 않도록 regularization을 통해 가중치가 큰 값을 가지면 불이익을 줌. L1 규제(절댓값 weight 계수 총합) 또는 L2 규제 (weight 계수 제곱합)을 cost(Data 오차 합)에 추가함

torch.optim.Adam(params, lr=0.001, weight_decay=1e-5)

- Dropout: model의 중간 layer에 적용되어 일정 비율의 출력을 0으로 설정 (nn.dropout(x, train=True))

2) Underfitting: 학습이 제대로 되지 않는 현상으로 학습 Data를 늘리거나, layer 및 가중치 수를 늘려보도록 한다. (이 경우 가중치 규제는 사용하지 말 것!!)

 

'Programming > Deep Learning' 카테고리의 다른 글

7. Recurrent Neural Networks (RNN) & LSTM  (0) 2022.04.08
6. Convolution Neural Network (CNN)  (0) 2021.02.04
5. 머신러닝 Workflow  (0) 2021.02.01
3. 신경망 구조  (0) 2021.01.19
2. 신경망 구성 요소  (0) 2021.01.13

2014

충남대학교 컴퓨터 공학과 입학

Be the Maker (미래창조과학부, Intel 코리아 주관) - 수료 

NIA 창조 비타민 비타톤 대회 - 우수상

2015

ETRI 국가근로장학생 근무

ICT 융합 프로젝트 공모전 - 참가상

Make-a-Thon 광주(미래상), 대전(은상)

SKT Hack-A-Thon 참가

Maker Fair 서울 전시

경기코텐츠코리아랩 위키데이 4기 수료

KAIST SDIA 웨어러블 컴퓨터 지정공모 - 본선 진출

CNU CSE 창의작품경진대회 - 장려상

2016

Microsoft Imagine Cup - 본선 (TOP 7) 진출

China SW Cup - 2등

한국 수자원 공사 물 관련 기술 S/W 아이디어 공모전 - 은상

CNU 글로벌 SW 트랙 멤버십 선정

지능형 SoC 로봇워 Drone 부문 - 동상

한이음 멘토링 수행 및 저작권 등록 (IoT 스마트미터를 활용한 공용 세탁기 관리 시스템)

한이음 및 한국정보과학회 학술대회 - 최우수

한이음 공모전 - 입상

14회 임베디드 소프트웨어 경진대회 - 수료

CNU CSE 주니어 창의작품경진대회 - 장려상

CNU CSE 창의작품경진대회 - 우수상

2017

넥슨 아이디어 챌린지 - 대상 (상금 천만원 및 항공권)

충남대학교 올해의 공대인상 - 학장상

국방 ICT 학회 발표 - 우수상

2018

Hdac 블록체인 해커톤 - 장려상

2019

KAIST 문화기술대학원 석사과정 진학

ICT 문화융합 비즈니스 챌린지 - 장려상

아트센터나비 Heartbot 전시

Junction x Seoul - Naver Zepeto Render API Track Winner

2020

KIRD R&D 리얼챌린지 프로그램 선정 (6개월; 1800만원 지원)

KAIST Maker Space DITO 프로젝트 수행 (Interactive IoT Music Cube)

업사이클 해커톤 & 한국교통대 메이커톤 - 멘토링 (총 6회 이상)

모두연 LG MVP & 네이버 커넥트 CS50 & KAIST 영재원 캠프 - 멘토링

영재원 Unity 교재 제작 (기초, 심화, 고급)

'Life' 카테고리의 다른 글

Amsterdam 여행(2018.10)  (0) 2019.09.09
EPL 직관(2018.10)  (0) 2019.09.09
London 여행 (2018.10)  (0) 2019.09.09
New York & Boston 여행 (2018.02)  (0) 2019.09.09
Orlando 여행(2018.02)  (0) 2019.09.09

1) Layer (신경망 기본 블록)

  - 선형 Layer, 즉 y=wx+b를 의미함 (= Dense, Fully Connected Layer)

  - 각 Layer은 개별적 학습 parameter를 가짐, but 선형 Layer를 여러개 쌓는다고 성능이 좋아지는 것은 아니다. 이는 결국 1개의 선형 Layer로 표현될 수 있기 때문에 결국 1개의 Layer와 차이가 없어진다.

  - 그래서 여러 비선형 활성 함수를 같이 사용해야 한다! (Sigmoid, Tanh, ReLU, Leaky ReLU)

   비선형 활성 함수

     Sigmoid: 실수를 취해 0~1 사이를 출력하도록 한다. input이 음수이면 0에, 양수이면 1에 가까운 값을 반환함. 단점으로는 0 or 1에 가까워 지면 기울기가 0이 되면서 가중치가 더 이상 조정되지 않으며 dead neuron이 됨.

     Tanh: -1에서 1 사이의 값으로 반환, 이 함수도 기울기가 0이 되는 경우가 존재하지만 출력값이 0을 기준으로 만들어지므로 변화폭이 더 큼

      ReLU: f(x) = max(0,x) 로, 음수는 0, 양수는 그대로 반환하게 한다. (단, Leaky ReLU는 음수를 0.001과 같은 매우 작은 수로 반환함). 최근에 가장 많이 사용되는 방법으로 SGD(Stochastic Gradient Descent)가 더 빨리 수렴하고 연산 비용이 적다라는 장점이 있지만, 이 또한 기울기가 크면 죽는 경우가 있어 learning rate를 조정해야 한다.

 

2) Neural Network 구축

    - Pytorch의 nn.Module class를 상속하여 init, forward method를 구현

        * init: 선형 Layer를 초기화

        * forward: init 메소드에서 초기화한 Layer에 입력 데이터를 전달하고 최종 출력 반환 (여기서 ReLU 같은 비선형 함수 사용)

class LinearRegressionModel(nn.Module): 
    def __init__(self): 
        super().__init__()
        self.linear = nn.Linear(5, 2)
        self.linear = nn.Linear(2, 1)

    def forward(self, x):
        return self.linear(x)

model = LinearRegressionModel()

     Model 아키텍쳐

      회기: 예측 문제로 1개의 숫자를 반환함 (마지막 Layer는 선형)

      이진분류: Sigmoid 함수를 마지막 layer에 배치하여 이미지의 output을 A 또는 B 중에 선택하게 함

      다중분류: 마지막 Layer에 softmax 함수를 사용하여 입력 데이터가 각 class로 분류될 확률을 구함 (전체 합=1)

 

3) 오차함수

    - Gradient descent optimizer (scalar를 입력 받기 때문에 loss func도 scalar로 반환해야 함)

    ML은 오차함수에서 나오는 값을 최소화하는 반복 과정으로, 2개의 오차함수가 있어도 1개의 Scalar 형태로 만들어야 함 (part 4 참고). 회기 문제는 nn.MSELoss(), 이진 및 다중 분류 문제는 cross-entropy Loss 등등을 사용하고 L1, NLL, NLL Loss 2d 등이 있다. (nuguziii.github.io/dev/dev-002/)

 

4) 최적화

    - 오차를 줄이고, 알고리즘 정확도를 향상시키기 위해 가중치 최적화하는 과정으로 optim = optim.SGD(model.parm(), lr=0.01)로 사용하고, lr은 학습 param 변경 비율을 의미함. 그리고 계속 누적되기 때문에 반복문 안에서 zero_grad()를 호출하여 기울기 초기화 과정이 필요함

for input.target in dataset:
    #초기화
    optimizer.zero_grad()

    #기울기 계산
    output = model(input)
    loss = loss_fn(output, target)
    loss.backward()

    #학습 param에 적용
    optimizer.step()

'Programming > Deep Learning' 카테고리의 다른 글

7. Recurrent Neural Networks (RNN) & LSTM  (0) 2022.04.08
6. Convolution Neural Network (CNN)  (0) 2021.02.04
5. 머신러닝 Workflow  (0) 2021.02.01
4. 머신러닝 입문  (0) 2021.01.22
2. 신경망 구성 요소  (0) 2021.01.13

21년도에 나온 ERPLAB을 개발한 Steve Luck 교수님의 저널 논문으로 Event-Related Potential (ERP)의 대표적인 패러다임들 각각에 대한 분석 방법 및 코드, 전처리, 실험 자극 구조, 실험 및 신호가 포함하는 의미 등 매우 잘 정리가 되어있다.

개인적으로 P300에 해당하는 Component에 대한 코드를 깊게 분석해보았다. 데이터 셋도 오픈소스로 공개되어있고 코드 한줄 한줄에 대한 설명이 자세하게 써있으니 직접 돌려보면서 아래 PDF 슬라이드를 참고해보아도 좋을 것 같다.

추가로 같은 데이터를 MNE 라이브러리를 활용해서 개발을 해보고, 이 논문의 결과와 비교해보며 제대로 코드가 작성 된것인지 검증해볼 수도 있었다 (https://github.com/jinwook31/MNE_Event-Related-Potential).

논문 링크 : www.sciencedirect.com/science/article/pii/S1053811920309502?via%3Dihub

 

ERP CORE: An open resource for human event-related potential research

Event-related potentials (ERPs) are noninvasive measures of human brain activity that index a range of sensory, cognitive, affective, and motor proces…

www.sciencedirect.com

 

[21.01.06] ERP CORE_P3.pdf
1.46MB

'Cognitive Neuroscience > EEG' 카테고리의 다른 글

CGX Quick 30 - Data Acquisition Program  (0) 2022.03.27

<해당 글은 'Pytorch로 시작하는 딥러닝' 책을 읽으면서 공부한 내용을 정리한 블로그입니다. 중요한 내용 위주로 정리해서 개인적으로 이해가 된 부분들은 생략되어 있을 수 있습니다.>

1) 데이터 준비 (Tensor)

- Scalar (0차원 텐서)

- Vector (1차원 텐서)

- 행렬  (2차원 텐서)

- 3차원 텐서: image에서 (height x width x RGB Channel)

- 4차원 텐서: batch (주로 16, 32, 64) 로 여러 이미지들의 묶음 (img 수 x height x width x RGB Channel)

- 5차원 텐서: batch x fps (동영상; batch 내 영상 클립 수 x fps x height x width x RGB Channel)

2) Variable 및 계산 그래프

    y=wx+b 라는 선형 모델을 사용할 때, 임의의 값으로 초기화되어 학습하며 이 변하는 w,b는 학습 parameter이고, dataset을 기반으로 정해지는 x, y는 고정 parameter이다. Pytorch의 경우 변수 선언 시 requires.grad를 true (학습), false (고정) varuable로 설정할 수 있다.

3) 신경망 모델 (Fitting)

4) 네트워크 구현

5) 오차함수: Sum of squared (SSE), MSE, Cross-Entropy 등을 이용한다. backward() 함수로 w,b의 변화 정도를 계산하여 측정할 수 있다. (단, 여러번 사용시에는 param.grad.data.zero_()로 앞서 계산된 값을 지워줘야함)

6) 신경망 최적화 (Optimize): Learning rate 등의 hyper-parameter 습 파라미터 (w,b) 조정 시 사용하는 비율을 의미함. Adam, RmsProp, SGD 등이 있다.

7) 데이터 로딩 (DataLoader class): Dataset class에서 init, len, getitem 메소드에 대한 구현 후 DataLoader class를 사용해 batch 형태로 변환한다.

'Programming > Deep Learning' 카테고리의 다른 글

7. Recurrent Neural Networks (RNN) & LSTM  (0) 2022.04.08
6. Convolution Neural Network (CNN)  (0) 2021.02.04
5. 머신러닝 Workflow  (0) 2021.02.01
4. 머신러닝 입문  (0) 2021.01.22
3. 신경망 구조  (0) 2021.01.19

www.youtube.com/watch?v=JqAZyF3pfpA&t=6s

Kim, J., Baek, K., & Jang, J. (2020, March). Petbe: Projecting a Real Being onto a Social Robot Using Contextual Data for a Pet Monitoring Method. In Companion of the 2020 ACM/IEEE International Conference on Human-Robot Interaction (pp. 290-292).

연구를 할 때 주로 repeated measures ANOVA를 사용하는데, 이에 대한 정리와 SPSS에서 실제로 데이터를 분석하는 방법을 위주로 정리를 해보았습니다.

작성하면서 참고한 문헌은 한번에 통과하는 논문 SPSS (www.aladin.co.kr/shop/wproduct.aspx?ItemId=140057986)입니다.

외주로 열전사 프린터를 갖고 서버통신으로 입력에 따른 이미지를 출력하도록 하는 프로젝트를 했었는데, 그 과정에서 라즈베리파이 - 프린터를 갖고 제작한 것에 대한 리뷰가 많지 않아서 이슈가 있던 것들을 위주로 따로 정리를 했습니다. 프로젝트에 대한 설명을 자세히 하기는 어렵지만 Android - Flask (REST API - Raspberry pi) + Printer 형태로 되어 있습니다.

준비물

Raspberry pi Sets

9V 2A Adapter with plug (중요!! - 꼭 9V 2A 인 것을 확인하세요)

www.adafruit.com/product/597

 

Mini Thermal Receipt Printer

Add a mini printer to any microcontroller project with this very cute thermal printer. Thermal printers are also known as receipt printers, they're what you get when you go to the ATM or ...

www.adafruit.com

* 설명에는 5V 2A라고 되어있지만 이미지 등을 깔끔하게 출력하기 위해서는 9V 2A 어댑터를 사용하는 것을 추천드립니다!!

구현

1) Raspberry pi Setting

sudo apt-get update

sudo apt-get upgrade

sudo raspi-config (Serial 권한 허용 [첫 번째 꺼는 No, 두번째 꺼는 Yes로])

pip3 install flask-restful

sudo apt-get install git cups wiringpi build-essential libcups2-dev libcupsimage2-dev python-serial python-pil python-unidecode

git clone https://github.com/adafruit/zj-58 

cd zj-58

make

sudo ./install

cd

git clone https://github.com/galacticfan/Python-Thermal-Printer/

이후에  /dev/serial0, 19200로 접근하면 깨지는 글자 없이 출력이 될것입니다. 한글 출력의 경우 추가 라이브러리 등 복잡한 방법이 필요하여 이미지로 대체하였습니다. 

2) Printer Setting

프린터 연결의 경우 아래 포스트를 참고하면 되는데, 해당 제품의 경우 순서에만 맞게 라즈베리파이에 꽂고 Power 선 부분만 어댑터에 맞게 잘라서 사용하면 된다.

medium.com/geckoboard-under-the-hood/building-a-slack-printer-for-remote-retrospectives-8de0282e5791

 

Building a Slack Printer for Remote Retrospectives

…with a little help from a Thermal Printer, a Raspberry Pi and Slack’s Slash Commands.

medium.com

프린터 코딩의 경우 (github.com/galacticfan/Python-Thermal-Printer/) 이 깃에서 제공하는 함수들을 사용하면 쉽게 사용할 수 있고, 추가로 필요한 부분의 경우 OS 함수로 명령어를 직접 보내줄수도 있습니다.

* Issue

- 알 수 없는 문자가 계속 나오거나 아예 아무것도 나오지 않는 경우 확인을 해야할 것이 우선 전원이 제대로 들어가고 있는지 (대다수의 경우), 이미지가 깨지지 않았는지 (기본 예시를 출력해볼 것!)를 확인해보는 것이 좋습니다.

- 가끔 Text 앞에 J 같은 글자가 나오는 경우가 있는데, 이는 Adafruit_Thermal.py에서 printBreakTime 변수를 바꿔주면 다른 값으로 찍히게 되는데 이부분을 만지면 해결이 될 수도 있습니다.

+ Recent posts