이제 슬슬 노드들이 어려워지고 다른 부분들도 점점 어려워지고있다.
한주 한주 해야할 것들이 점점 늘어날텐데, 소화할 수 있을지 걱정이다.
그래도 지금은 일단 정리부터...ㅎㅎ
[3주 차 정리]
1. Fundametals Node
◈ 텍스트의 다양한 변신(문자열, 파일다루기)
파이썬에서 문자열 데이터를 다룰때 사용하는 메소드들과 여러가지 파일 포맷(CSV, XML, JSON)파일을 다루었다.
- 정리
바이트(byte) : 컴퓨터의 기본 저장단위이며, 1바이트는 8비트이다. 이 저장단위로 인해 integer의 max값 등이 정해진다.
인코딩 : 문자열을 바이트로 변환하는 과정(문자열을 컴퓨터가 알아들을 수 있도록 변환)
디코딩 : 바이트를 문자열로 변환하는 고가정(컴퓨터의 데이터를 사람이 이해할 수 있는 데이터로 변환)
ord('문자') : 해당 문자를 유니코드로 변환(파이썬 3.x부터 적용)
chr('문자'): 해당 문자를 유니코드로 변환(파이썬 3.x부터 적용)
변수명.upper() : 문자열인 변수를 모두 대문자로 변환
변수명.lower() : 문자열인 변수를 모두 대문자로 변환
isupper() : 문자열이 모두 대문자니? 맞으면 True 반환
islower() : 문자열이 모두 소문자니? 맞으면 True 반환
isalpha() : 문자열이 모두 알파벳 문자니? 맞으면 True 반환
isalnum() : 문자열이 모두 알파벳 문자와 숫자로 이루어져 있니? 맞으면 True 반환
isdemical() : 문자열이 모두 숫자로 이루어져 있니? 맞으면 True 반환
◈ Data 어떻게 표현하면 좋을까? 배열(array)과 표(table)
List, Dictionary, numpy, pandas에 대한 내용을 전반적으로 다루었다.
- 정리
리스트명.append('변수') : 변수를 해당 리스트 오른쪽에 추가해준다.
리스트명.inset(위치,'변수') : 변수를 리스트 해당 위치에 추가해준다.
for i in range(시작,끝) : 범위에 있는 것을 시작부터 끝까지 i값에 넣어서 반복함.
◈ 딥러닝과 신경망의 본질
애매하게 느낄 수 있는 딥러닝과 머신러닝의 개념차이를 명확하게 인지하게 만들어주는 노드였다.
딥러닝의 배경설명을 하며 철학에 관련된 내용들과(행동주의, 인지주의, 연결주의)
딥러닝의 기본적인 부분인 신경망에 대해서 다뤄보았다.
전반적인 기초지식을 배운 것 같은 느낌이었다.
2. Exploration Node
◈ 카메라 스티커앱 만들기 첫걸음
언제나처럼 시작은 흥미진진하고 재밌었다.
어플같은데서 많이 쓰이는 스티커붙이기를 직접 구현해볼 수 있다니 노드 내용 하나하나가 재밌었다.
역시나 문제는 내가 직접 해보면서부터 생겼다.
분명 내가 의도한바는 고양이수염 스티커를 코에 착 달라 붙이는건데 요놈은 코가 싫은건지 이마에서 내려올 생각을 안했다.
처음에는 이미지 처리를 잘못했다고 생각하고 다른 이미지로 해보고
크기를 크게도 해봤다가 작게도 해봤다가 이런저런 시도를 했다.
그러다 결국은 답을 찾아내었다.
기존에 예제로 진행했을때에는 이마에 왕관을 붙이는 것이었기 때문에 스티커가 사진을 넘어가는 부분이 생겨
해당부분을 잘라주고 좌표를 위로 올리는 작업을했다. 그부분이 문제였다.
고양이 수염은 잘라줄 필요도 없고 좌표를 위로 올려줄필요도 없었다.
해당부분을 수정하고 진행해보니 다행히 코에 잘 붙었다.
혹시모르니 다시 코드를 보며 확인해봐야할것 같다.
카메라 스티커앱 만들기 project github (차후 링크예정)
◈ 영화리뷰 텍스트 감성분석하기
처음 진행해보는 자연어처리 노드였다.
뭔가 중간부분을 생략하고 점프를 뛴 기분이었다. 코드를 치는시간보다 구글링으로 찾아보고 읽는 시간이 더 길었던 것 같다.
아직도 각 코드가 무슨역할을 하고 어떻게 구성해야되는지가 머리에 명확하지 않다.
물론 이전에 Exploration Node들도 마찬가지긴 했지만 그래도 뭔가 남다른 느낌이었다.
다행히 구글링을 하다가 Wikidoc에서 비슷한 내용을 찾기도 해서 하고있다.
이번 노드는 정말 한줄한줄 주석달아가면서 봐야할 것 같다.
다음주를 걱정하게 만드는 노드였다.
영화리뷰 텍스트 감성분석하기 project github (차후 링크예정)
3. 알고리즘
◈ 3주차
본격적으로 시작하는 알고리즘 풀잎스쿨이었다.
그냥 강의느낌으로 들었던 저번주와는 다르게 서로의 풀이하는 방식, 생각 등을 들어가며 진행했다.
확실히 여러사람의 이야기를 들으니, 문제풀이 접근방식이 다양해지는 느낌이었다.
문제는 '파이썬 알고리즘 인터뷰'의 내용에서 진행했는데 뭔가 가벼운마음으로 갔다가 온몸 무겁게 두들겨맞고온 느낌이었다.
접근을 어떻게 해야지 생각하는 부분자체가 어려웠다. 논리적인 사고력이 떨어져서 그런가 싶었다.
그래도 시간싸움이라 생각하고 꾸준히해야겠다.
4. DeepML(CS231n)
◈ 3주차 (Lecture3 : Linear Classifiers) :
저번강의에서 다뤘던 KNN과 다른 선형분류기에 대해서 강의.
- Linear Classifiers(선형분류)란?
여러개의 픽셀로 이루어져있는 이미지 데이터를 하나의 기둥같이 벡터화 시키고
이를 가중치 행렬(W)을 통해 결과값을 도출하는 방법.
이미지 예측을 잘 할 수 있도록 만드는 가중치 행렬(W)를 찾는 것이 관건임.
- f(x,W) = Wx + b
여기서 f(x,W)는 결과값을 의미하고, W는 가중치행렬, x는 input_data, b는 bias값을 의미한다.
개인적으로 생각했을 때는 우리가 어릴때 배웠던 ax+b와 같은 함수에서의 의미와 비슷하다고 본다.
결과적으로, 선형분류기는 선을 기준으로 분류를 하기때문에 전체적인 범위를 나누는 것은
가중치(기울기)의 역할이 크고, b(y절편)은 어느범위에 더 가깝다고 생각되는지에 대한
편향값으로 생각하면 좋을 것 같다.
- template
선형분류기에서는 카테고리마다 이미지의 특성들을 시각적으로 처리하여
결과값을 도출할 수 있는데 이를 template이라고 부른다.
개인적으로는 거름망이나 테마라고 생각해도 될 것 같다.
- Loss Function?
손실함수(Loss Function)는 분류기가 얼마나 좋은가를 알려주는 함수이다. 점수가 낮을수록 좋은 분류기라고 정의한다.
이 강의에서는 SVM Loss, Cross entrophy를 다룬다.
- SVM Loss?
올바른 라벨의 점수와 각 라벨의 점수의 차에 margin값을 더한 값들을 합해서 구한다.
margin은 클래스를 구분하기위한 넘어야 하는 마지막 허들이다.
ex)margin이 1이라고 했을때 정답 클래스의 점수(score)가 3이고 오답클래스의 점수(score)가 2.5다.
그러면 loss는 2.5-3+1 = 0.5이다. 이건 100% 정답이라고 볼 수는 없다. 즉 2등.
왜냐하면 loss가 0일때가 완전한 정답이라고 볼 수 있기 때문이다.
- 정규화를 하는 이유?
학습데이터에 맞춰져있는 w를 test에 다시한번 맞춰주기 위해서 행함.
- 정규화방법
L2 ⇒ 가중치의 차이의 값을 0에 가깝게
L1 ⇒ 통상치의 값을 빼주고 작은값을 0으로 ⇒ 중요한 가중치만 남김
딥러닝 용어 정리, L1 Regularization, L2 Regularization 의 이해, 용도와 차이 설명
- 정규화의 목적
1)선호도를 표시화 한다.학습에러를 최소화시킨다.
2)오버피팅 방지
- 언더피팅이란?
⇒ 학습 데이터에 아직 덜 맞춰져 학습이 좀더 필요한 상태
- 오버피팅이란?
⇒ 학습 데이터에 너무 적합하게 맞추어져섯 테스트 데이터에 대해서 정확도가 떨어짐
⇒ 최적화를 향상시킨다. 미분이 안되는 부분에 곡률을 집어넣는다.
- 왜 -log를 취할까?
우리는 loss가 얼마나 크게 나와서 나쁜지를 알고싶기때문에 -log를 취한다.
못맞추는 경우에 패널티를 줄 수 있기 때문에 -log로 취한다.
"로그함수의 특징" 찾아볼 것!
⇒ 0~1값을 취해야 하므로 -log를 취한다.
- Kullback-Leibler divergence
⇒ 정답지와 얼마나 맞게끔 확률분포가 나왔나를 알려주는 값
- cross entropy
- Softmax function
P49 Q1: What happens to the loss if the scores for the car image change a bit?
Q1 : 차 이미지의 점수가 약간 바뀌게 된다면 loss에는 무슨일이 생길까요?
A1 : 4.9보다 작다면 loss에는 아무런 변화가 없다.
P50 Q2: What are the min and max possible loss?
Q2 : loss 값의 최댓값, 최소값은 무엇입니까?
A2 : loss의 최소값은 0이며 이는 다른 잘못된 카테고리를 고르는 점수가 올바르게 선택했을때의 점수보다 현저히 낮을때 갖게되는 값이며, loss의 최대값은 무한하다.
P51 Q3: If all the scores were random, what loss would we expect?
Q3 : 만약 가중치 행렬을 전혀 학습하지 않은 모델을 돌려, 무작위의 값을 얻었을 때 loss값은 어떻게 될 것이라고 예상합니까?
A1 : loss값은 아마 1에 가깝게 나올 것이다. 하지만 만약 그렇게 나오지 않고 이상한 값이 나온다면 어딘가에 버그가 있을것이라고 예측할 수 있다. 이는 효과적인 디버깅 기술이다.
P52 Q4: What would happen if the sum were over all classes? (including i = y i )
Q1 : loss계산식에서 정답의 스코어는 제외하고 계산하게끔 되어있는데, 이를 정답의 스코어를 포함해서 계산하게 되면 어떻게 되는가?
A1 : 정답을 포함해서 계산하게 되면 결국 전체 로스값에 +1만큼 하게되므로 의미가 없다.
P53 Q5: What if the loss used a mean instead of a sum?
Q5 : 계산식에서 합으로 구하는 것이 아닌 평균으로 구하게 되면 어떻게 되는가?
A1 : 앞과 마찬가지고 단순한 변화이기 때문에 의미가 없다.
P54 Q6: What if we used this loss instead?(ex) 제곱의 합을 사용한다면?)
Q6 : 만약 단순 max값이 아니라 max값의 제곱의 합을 사용한다면?
A1 : Mulitclass SVM loss라고 부를 수 없게 변할 것이다. 모든 점수가 선형이 아닌 비선형 방식으로 바뀌기 때문이다.
'[SSAC X AIFFEL]' 카테고리의 다른 글
[6주차]SSAC X AIFFEL (02.01~02.05) (0) | 2021.02.06 |
---|---|
[5주차]SSAC X AIFFEL (01.25~01.29) (0) | 2021.01.29 |
[4주차]SSAC X AIFFEL (01.18~01.22) (0) | 2021.01.22 |
[2주차] AI 개발자로 가는 첫걸음 (01.04~01.08) (0) | 2021.01.08 |
[SSAC X AIFFEL]앞으로의 목표 (2) | 2020.12.31 |