인지 정리
Chap1.
- 인공지능이란
- 인간처럼 사고,행동하기
- 논리적으로 사고,행동하기
- 지능이 있는 기계를 만드는 분야다.
- 인공지능 > 머신러닝 > 딥러닝 (인공지능의 부분집합인 머신러닝의 부분집합인 딥러닝)
- 탐색의 시대 → 지식의 시대 → 학습의 시대
- brute force방식으로 접근 → 조합 폭발 → 첫번째 겨울
- 인공지능이 모든 문제를 해결할 수 없다는 사실을 깨닫음 → 전문가 시스템 등장
- 너무 특수한 상황에서만 전문가 시스템이 유용함 → 두번째 겨울
Chap2.
- python 기본 문법
- type(데이터) :데이터의 타입을 리턴한다
- arr[a:b]
- idx a
b까지 출력 a를 안쓰면 0b-1, b를안쓰면 aend, a안쓰고 b=-1이면 beginend
- idx a
- car={’HP’=100}로 정의하고 car[HP]하면 100이 리턴됨
- car[’color’]=white 이런식으로 추가도 가능
- 생성자는 def_init_()
- numpy 기본 문법
- np.array([1,1],[2,2],[3,3]) → 1 1/2 2/3 3
- zeros : 0으로 채워진 matrix ones:1로채워진, eye: 대각선만 1인
- np.arrange(a,b,c)
- a,c안쓰면 0
b까지 배열, a만쓰면 ab까지, a,c 다쓰면 a~b까지 c간격만큼
- a,c안쓰면 0
- np.linspace(start,stop,num) start~stop까지 num만큼 배열생성
- np.concatenate((x,y),axis=1) → 배열두개를 가로로 붙임
- np.vstack((x,y)) → 배열을 세로로 합침
- reshape → -1을 인자로 주면 나머지 인자기준으로 알아서 맞춤
- arr1,arr2=np.split(arr,[3],axis=1) -> arr을 axis축의 [3]기준으로 분할함
- arr1=arr[np.newaxis,:] newaxis를 앞에두면 arr의 원소들이 다 하나의 행으로 변경 즉 n행 1열이 된다, 뒤에두면 1행 n열
- 2차원 배열이 있으면 a[0:2,1:3]하면 02열을 추출해서 리턴함
1행 1- 행렬곱셈을 하려면 arr1@arr2를 하면된다. (arr1.dot(arr2))도 가능
- 배열의 sum,min,max,mean 지원
- mean(axis=0)이렇게 축을 정해주면 0이면 한 열씩 계산해서 리턴하고 1이면 한 행씩 계산해서 리턴함
- np.random.rand(5,3) →5행3열의 난수 배열 생성 np.random.seed(val)하면 val을 시드로 난수 생성함 . rand값은 0~1
- randn은 정규분포따르는 난수배열, random.normal(평균,표준편자,dimension)이렇게도 가능
- arr.T하면 transpose
- arr.flatten()하면 평탄화(1차원배열로 변경)
Chap3.
- 전통적 프로그래밍은 알고리즘을 만들어서 프로그래밍 하는 것(데이터+프로그램→출력)
- 머신러닝은 데이터셋으로 훈련을 시켜 판별하게 하는 것(데이터+출력 → 프로그램)
- 지도
- 회귀
- 연속적인 데이터로 훈련, 입,출력 모두 실수
- 분류
- 입력을 두개이상의 유형으로 분할하는 것
- 신경망,knn등등
- 회귀
- 비지도 학습
- 레이블 y를 주지 않고 학습 시키는 것
- 데이터들의 상관도를 분석하여 유사한 데이터들을 모음
- 강화학습
- 컴퓨터가 취하는 행동에 대해서 처벌이나 보상을 주는 것
- 민감도 : True인 사람을 환자라고 올바르게 진단하는 비율 TP/(TP+FN)
- 특이도 : False인 사람을 아니라고 올바르게 진단하는 비율 TN/(TN+FP)
Chap4.
- 선형회귀
- 부모키,자녀키 관계 같은 데이터들로 이 데이터를 가장 잘설명하는 일차함수의 기울기와 절편값을 찾는것
- 데이터의 y값과 현재 선의 y값의 차이의 합을 최소화 한다
- 손실함수는 실제 y값과 직선의y값의 차이의 제곱의 합을 데이터의 갯수로 나눈것을 의미
- 학습데이터는 반드시 2차원 배열이어야 함
- 경사하강법
- 점진적인 학습방법
- 학습률이 너무 낮으면 학습이 너무 느리고. 너무 높으면 오히려 학습이 되지 않음
- 따라서 기울기(가중치)와 편향을 수정해 주어야 함
- 이때 수정은 W=W-Lrate*dW, b도 마찬가지 Lrate은 설정한 학습률
- 과잉 적합(over fitting)
- 학습데이터에서는 뛰어난 성능을 보이지만 새로운 데이터에 대해서 성능이 잘 안나옴
- 과소 적합
- 그냥 학습이 안되는거임 모델변경 필요함
- 그냥 학습이 안되는거임 모델변경 필요함
Chap5.
- 신경망의 장점
- 학습이 가능하다
- 몇개가 고장나도 큰 문제가 발생하지 않음
- 입력을 받아 뉴런을 활성화 시키는 함수를 활성화 함수(activation function)이라고 한다
- 퍼셉트론 : 신경망의 초기 모델
- 입력 신호의 가중치 합이 임계값을 넘는 경우 1 아니면 0을 출력함
- w1x1+w2x2=b≥0 →1이런식으로
- 활성화 함수로 step func사용
- 직선으로 입력 패턴을 분류하는 선형 classifier의 일종
- 단일 퍼셉트론으로는 XOR을 분리하지 못하는데 다중 퍼셉트론을 사용하면 이를 해결할 수 있음
- 선이 두개가 필요한데, 이걸 동시에 만드는 것이 아닌, 하나의 퍼셉트론으로 하나의 선을 만들고 다른 하나의 퍼섭트론으로 나머지 선을 만들어 구분한다는 것.
- ex. line1에서 up이고 line2에서 up이면 1 , line1 down line2 up이면 0 이런식
Chap6.
MLP(다중 퍼셉트론) : 입력층과 출력층 사이 hidden layer가 있는 놈
activation function : input의 총합을 받아 출력을 계산하는 함수
- 계단함수 : 어느 지점 기준으로 0,1으로 갈리는거
- 미분 값을 사용하기 힘들다
- sigmoid : 부드럽게 올라가는 놈.. 0~1
- 미분값 잘 알 수있음
- x가 너무 커지거나 작아지면 미분 값이 0에 가까워짐..
- ReLu : 입력이 0보다 크면 그대로 출력, 작으면 0을출력함
- 0보다크면 미분값이 1이라는 장점?
- 0보다 작으면 미분 값도 0이 된다
- tanH : sigmoid랑 유사한데 출력 범위가 -1~1
- 계단함수 : 어느 지점 기준으로 0,1으로 갈리는거
Foward pass : 입력이 입력층 → 은닉층 → 출력층으로 전해지는 과정
- Wx+b=Z가 기본 형태, 이 Z를 활성화 함수의 입력으로 넣어서 나온 결과를 다음 layer의 입력으로 사용한다.(초기 layer입력값은 당근 x임) P23,24참고
손실함수 : MSE(예측값과 실제값의 차이의 제곱의 평균)(값의 갯수로 나누기도 하지만 일반적으로는 2로 나눠줌)
경사하강법 에서 손실함수 이용하기
- 손실함수를 가중치로 미분한 값이 양수다 : 가중치 감소
- 음수다 : 가중치 증가
- x = x - learning_rate * gradient(x)
- 여기서 gradient는 loss func의 미분함수, 여기서 나온 x를 loss func에 넣고 나온 값이 loss
역전파
- 입력이 주어지면 순방향 계산, 나온 결과를 실제값과 비교하여 오차를 계산, 이 오차를 역방향으로 전파하면서 오차를 줄이는 방향으로 가중치 변경
- 기본적으로 앞전의 오차 계산과 유사함
- net는 input과 w의 곱의 합, out은 활성화 함수에 해당 net값을 넣어 나온 출력값
- delta는 출력층 유닛의 경우(1/2)(target-output)^2을 미분한 값, (output-target)*f’(output)
- target이 Y, out이 y_pred
- 은닉층의 경우, (자신 다음 layer의 노드로의 가중치_해당노드의delta의 합)_f’(자신의 net)
- W0E는 -learningrate_E의delta_0의 out값
- 맨밑에 처럼 w의 변화량은 w5(t+1)-w5(t)고 여기서는 learning_de/dw5로 나타냈는데 다르게 나타내면 -learningrate_delta*output임 왜냐? 델타 설명보면 알겠지만 맨마지막 사진 1,2번이 delta를 의미하고 3번은 사실상 output값 그자체이기에 식이 이렇게 정리되는 거
- learning rate은 양수고 계산시에는 음수로? 위에 설명들 보면 알겠지만 기본적인 원형은
- W=w-learningrate*dE/dw
Chap7.
- 가중치를 변경하는 방법
- Full batch : 전체 샘플 선택 평균 그래디언트 계산 → 가중치 변경
- Online learning : 무작위로 i번째 샘플 선택해서 그래디언트 계산 →가중치 변경
- mini batch : 일부 샘플 선택 샘플 평균 그래디언트 → 가중치 변경
- 모멘텀 : 이전 weight변화를 어느정도 유지시켜 학습속도를 증가시키는 것
- 종류로는 뭐, SGD,Adagrad,Adadelta,Adam(RMSprop+momentum),RMSprop등등
- 모델을 compile할때 optimizer로 사용됨
- Keras : 딥러닝 api, 백엔드 모델로 TensorFlow사용
- Sequential모델 생성, 필요한 layer를 추가하기
- 함수형 api사용
- 직접 정의한 클래스 이용하기
- Sequential모델 생성, 필요한 layer를 추가하기
- 학습률,모멘텀 가중치,은닉층의 개수,배치 사이즈 등등을 Hyper parameter라 함
- 찾는 방법
- 기본값(library개발자가 설정한 값) 사용
- 수동 검색
- Grid검색 : 몇개의 값을 지정하면 이 중 가장 좋은 조합 찾아줌
- 저기서 모델에 추가하는 활성화 함수 종류
- sigmoid, relu, softmax,tanh ..있음
- Loss function
- MeanSquaredError, BinaryCrossentropy, CategoricalCrossentropy,SparseCategoricalCrossentropy 등등
- 저기서 모델에 추가하는 활성화 함수 종류
- 찾는 방법
'CS' 카테고리의 다른 글
자료구조 정리 (4) | 2023.06.08 |
---|---|
인공지능(2) (0) | 2023.04.08 |
소프트웨어 공학(2) (0) | 2023.04.08 |
소프트웨어 공학(1) (0) | 2023.04.08 |
데이터 베이스(2) (0) | 2023.04.08 |