수업정리

  • 다중분류
    • 각각 클래스별로 확률을 내어 결과를 도출해 내는 것
    • 확률정보로 학습시키기 위해서 원핫인코딩으로 만든다
  • Flatten 
    • 2차원을 고려하지 못함
    • 2차원인 데이터들을 1차원으로 펴줘야 수식을 세우고 계산을 할 수 있다
    • 가중치만큼 계산을 해내는 것 뿐이다
    • 위치는 입력층 뒤에 은닉층 전에 쌓아준다.
  • sigmoid
    • sigmoid는 0과 1을 절대 벗어나지 않는 값만 도출해 낸다
    • 이진분류나 회귀에서 사용됨
  • softmax
    • 모든 클래스의 확률을 구하고 그 모든 확률 값의 합이 1이 되게 만든다.
  • categorical_crossentropy
    • loss함수이다
    • loss함수로 binary_crossentropy는 둘중 하나를 봄 -> 이진분류
    • 다중분류시 사용
    • 모든 클래스에 대해서 봐야하기 때문에 사용

 

 


수업시작

 

 

경사하강법

  • 좋은 W를 찾고싶어서 나온 방법
  • loss(손실)값이 낮은 모델을 찾는게 목적
  • 어디에 가야할 지는 알았는데 어떻게 가야 좋을까?
  • 가만히 있으면 해결이 되지 않는다
  • 실패도 경험이다
  • 기울기가 0인 지점을 찾자
  • 가중치를 조금씩 바꿔가며 기울기가 낮아지는 방향으로 나아가는 것
  • 지역 최적점에 빠진다.
  • 글로벌 미니멈을 찾아야한다
  • 중간지점에서 낮은 지점을 찾은 것을 로컬 미니멈이라고 한다.

 

확률적경사하강법

  • 경사하강법
    • 너무 오래걸리고 제대로 찾아가기가 어렵다
    • 실제로 대입해봤을 때 성능이 별로 좋지가 않다.
    • ex - 100개 중 100개
    • 모든 과목을 전부다 공부
  • 확률적경가하강법
    • 랜덤하게 몇개만 선택을 해서 나아가자
    • ex - 100개 중 30개
    • 불안정 적이긴 하지만 
    • 과목중 골라골라서 효과적으로 공부
    • 지역 최적점을 빠져나갈


모멘텀

 

  • 관성이라는 개념을 도입

 

네스테로프 모멘텀

  • 다음 스텝까지 고려해서 실제 t+1에 반영하여 업데이트
  • t+ t+1
  • 다 똑같은데 미분할 때 m
  • 불필요한 이동울 줄이는 방법

 

 

아다그리드

  • 학습률 감소 방법을 적용
  • 어차피 머니까 학습률이 초반엔 커도 된다. 어차피 랜덤 값은 최적값과 멀테니까
  • 0에 가까워지면서 학습률을 줄여나가며 0을 최대한 지나치지 않게 한다.
  • 각각의 퍼셉트론마다 다르다.

경사, 학습률, 관성에 초점을 맞추는 방법들이 있다

 

 

 

  • 모든 데이터검토하여 방향을 찾자
  • 조금씩 데이터를 샘플로 검토하여 방향을 찾자
  • 관성 개념을 도입해서 가자
  • 다음스텝고려
  • 학습률을 고려
  • adadelta는 너무 작아지지는 않도록 방지해보자
  • RMSProp는 상황을 보며 세밀해 지는정도를 정해보자 비율과 기울기를 고력
  • Adam 경사와 학습률 둘다 고려

 

 

오차역전파

  • 가중치(weight)와 편향(bias)의 값을 학습하기 위한 알고리즘
  • 학습은 두가지로 나눠짐
    • 순전파 : 전파가 원래방향대로 감
      • 출력값을 찾아가는 과정 -> 추론
    • 역전파 : 역으로 전파를 시킴
      • 최적의 학습 결과를 찾아가는 것 -> 학습

 

순정파

  • 계산만 한 것
  • 아무 w나 붙인 것

 

역전파

  • 에러정보를 가지고 w들을 수정시킨다 그전에 있는 층이 수정이 됨
  • w가 데이터를 이해하려고 
  • 출력층에서 입력층 쪽으로 전파

 

1epoch 는 순전 역전을 한 번씩 한 것

 

 

시그모이드 함수의 문제점

  • 경사가 사라짐 -> 기울기 소실
  • 계산할 기울기가 없다
  • 기울기가 0이되어야 하는데 미분 사용
  • 시그모이드를 통해서 0~1사이 값이 나오는데 미분시켰더니 아래 파란선이 나온다.
  • 파란선 - 최대가 너무 낮음 0.25

 

기울기 소실

역전하면서 학습 할 때 기울기가 0이 되는 방향으로 가는데 찾는 방법은 미분을 해야한다

하다보니 미분을 할 수 있는 기울기 조차 사라져 버림

더이상 수정할 수가 없다

  • 이를 해결하기 위해 다양한 역전파 방법들이 생김

 

 다양한 역전파 방법

  • tanh
    • 하이퍼블릭 탄젠트 - 2배씩 늘려서 -1~1 로 잡음
  • ReLU : 현재 많이 쓰고 우리도 사용한다
    • 양수면 값을 살려두고 음수면 죽인다.
  • Leaky ReLU
    • 음수를 어느정도 조금 남겨 놓는 것
  • Maxout
    • 최대값을 살려놓는것
    • GAN이라는 모델에 적합
    •  
  • ELU
    • Leaky ReLU를 좀더 완만하게 만든 것
    • 학습량이 많고 연산이 복잡한 경향이 있다

 

 

새노트

회귀

  • loss = MSE(평균제곱오차)
  • 맨 마지막 (출력층) 뉴런 개수 : 1
  • 활성화 함수 : linear(항등함수) / Default 임

이진분류

  • loss = binary_crossentropy
  • 맨 마지막 (출력층) 뉴런 개수 1
  • 활성화 함수 : sigmoid

다중분류

  • loss = categorical_crossentropy
  • 맨 마지막 (출력층) 뉴런 개수 : 클래스 개수
  • 활성화 함수 : softmax

 

 

fashion 데이터 분류

 

흑백화

 

 

다른방식으로 설계

모델 설계는 항아리 모양으로 하는게 좋다.

 

  • 너무많은 퍼셉트론에서 갑자기 10개로 줄여버리면 뚝끊긴 느낌이니 잘 조절해 준다.
  • 모델학습이 끝난

 

모델 저장

  • 학습이 끝난 모델을 저장할 건데
  • 경로부터 이동해준다

  • 옮겨진 경로에 저장하기

  • 구글 드라이브 연동 해서 들어가보면 저기 빨간박스 부분에 모델이 저장되어있을 것이다.

여기에 저장이 된다

 

 

모델 불러오기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

수업정리

 

  • 뉴런에서 역치라는 개념을 가지고 있다
  • 역치이상이어야 다음 뉴런으로 넘어갈 수 있다.
  • 사람의 뉴런을 구현하고자 선형모델로 만들었다
  • 퍼셉트론의 개념
    • 현재 딥러닝의 가장 작은 단위를 제안
    • 신경세포에 가중치를 모두 곱하고 합한 것을 y값을 도출해 냄
    • 하나의 y값이 반환되면 다시 활성화함수를 만나
    • 활성화 함수로써 시그모이드를 만나면 y가 100이던 1000이던 0과1로 만들어냄
    • 활성화함수로 기존에는 계단함수로 시작하였으나 현재는 잘 쓰지 않는다 -> 시그모이드를 사용
    • XOR문제가 발생 
      • 이런 간단한 것도 풀지 못함
      • 선 하나만으로는 해결이 안되었음
      • 여러층을 쌓음으로써 해결됨
      • 하나의 퍼셉트론으로는 해결되지 않았던 문제가 해결됨
  • Dense 말고도 연산가능한 신경망을 붙인다.

CNN 과 RNN 이용하여 층을 쌓아서 모델을 만들어볼 예정

  • 맨 처음과 맨 끝은 신경을 많이 써줘야한다.
  • 입력층
    • 데이터가 가장 먼저 만나는 층
    • 데이터하나의 크기 (컬럼 수)
  • 출력층
    • 예측값이 나오는 층
    • 예측값이 몇개가 나올지
    • 활성화 함수는 뭘 써줘야할 지
  • 은닉층
    • HIDDEN LAYER
    • 중간층
    • 층을 몇개를 쌓든지..

  • W는 서로 다른 가중치를 가지고 있다
  • 각각의 퍼셉트론 들이 각자 다른 학습을 한다.
    • 가중치가 전부 다르다
  • 퍼셉트론마다 만나서 나온 예측값이 다 다르다.
  • 그 예측값으로 다음 퍼셉트론을 만나 학습데이터(재료)로 사용된다.
  • 퍼셉트론은 이전 층의 퍼셉트론 예측값+절편 만큼 학습 재료로 쓰인다.
  • 회귀와 이진 분류는 하나의 예측값만 나온다.
  • 입력층은 이전퍼셉트론이 없어서 입력데이터 개수를 알려주는게 필요하다.
  • 다층 퍼셉트론
    • 비선형 데이터를 분리할 수 있음
    • 학습 시간이 오래걸린다.
    • 가중치 파라미터가 맣ㄴ아 과적합 되기 쉽다
    • 가중치 초기 값에 민감하여 지역 최적점에 빠지기 쉽다
      • 지역 최적점 : 전역 최적점이 있는데도 불구하고 지역 최적점에 머무르는 현상

 

  • 딥러닝은 내가 직접 모델을 설계한다
  • 직접 평가방법을 설정
  • 유방암 분류 데이터는 이진분류 데이터셋이다.
    • 활성화 함수로 시그모이드 사용

 

 


 

 

수업시작

 

 

다중분류

  • 텐서플로우의 학습용 데이터 사용 

  • 어떤식으로 내장 되어 있나?

아무런 정보가 안들어있는 데이터들로만 이루어진 데이터이다.

 

data -> train, test -> X_train, y_train, X_test, y_test

 

 

공식문서에서 확인가능

  • 문제데이터로는 28 x 28 데이터가 60000장이 있다.
  • 숫자들의 모음이라 볼 수 있다.
  • Numpy 배열로 저장되어있다.
  • 정답은 10가지로 구성되어있음
    • 0~9로 분류 -> 다중분류
  • 흑백은 2차원 컬러는 2차원이 3장이 붙은 3차원
  • 컬러이미지는 1차원이 더 붙는다.
  • 28뒤에 3이 붙는다 -> R,G,B 의 수치값 
    • 60000, 28, 28 , 3

 

X_train[5999] - 한장의 이미지 데이터 28 x 28 구조

 

0101 데이터를 이미지로 시각화

  • 흑백이미지인데 왜 색상이 나오나?
    • -> 맷플러립에서 사용하는 색상 컬러 체계가 있는데 가장 기본적으로 정해져 있는 게 보라에서 노랑이다
    • 원래 흑백은 흑에서 백으로 가지만 맷플러립 기본 체계는 0에가까운 색은 보라색 1에가까운색은 노란색이다.
  • 다른색상 체계로 변경해주고싶으면 cmap파라미터 사용

 

라벨 종류 확인

  • 편향된 학습은 좋지 않다.
  • 분류면 몇개씩 구성되어있는지 확인하는게 매우중요하다!

 

라벨 빈도수 확인

 

데이터 빈도수 시각화

  • 검정부분에 많은 값이 몰려있고, 하얀 색은 별로 없는 편
  • 배경색이 검정이기 때문에
  • 글씨를 쓰는 무게감 때문에 연한 하얀색이 나온다. 0과 255로만 존재하지 않는 이유

 

Flatten, to_categorical 

 

  • 0 ~ 9선택지는 10개이다 -> 예측을 해야하는 클래스가 10개
  • 어떤 확률로 0이라고 맞췄는지 3이라고 맞췄는지
  • 디테일한 학습을 통해서 일반화 된 모델을 만들 수 있다.
  • 답체크만하는게 아니라 어떤 확률로써 2라맞춘건지, 3이라 맞춘건지
  • 결론적으로 분류는 확률적으로 학습시키는게 중요하다
  • 전체 데이터에서 (10가지중) 4일 확률 5일 확률, 정답데이터를 확률 정보로 변경하여 각각의 데이터에 대해서 확률로 반환하게 만들기
  • 원핫인코딩이 확률 데이터표현이라 볼 수 있다.
  • 모델은 예측값으로 100% 0%로 학습된다

학습할 때도 예측해야할 값으로 확률 정보로 학습한다.

반환도 확률 값으로 나오게

 

 

to_categorical() 사용하여 원 핫 인코딩(확률)

다중분류 출력층의 units 수 - 정답 예측클래스의 수

softmax 활성화 함수 (출력층 활성화함수)

 

  • 마지막 출력 층의 활성화 함수로 softmax => 확률 값으로반환 
    • 출력층에 있는 10개의 퍼셉트론들마다 확률 값이 나오는데 다 더하면 총 합이 1이되도록 맞춰줌 -> 정규화 작업
    • [0.1, 0.4, 0.3, 0.2]  -> 1번모델
    • [0.1, 0.7, 0.1, 0.1]  -> 2번모델
      • 위 두개의 결과를 내는 각각의 모델중 2번 모델이 학습이 잘 된 케이스
      • 1번은 낮은 확률로 정답을 가려내는 모델이다.

softmax 모든 클래스별로 확률 정보를 뽑아준다.

 

 

Flatten 으로 펼쳐주기

  • 2차원을 1차원으로 펼쳐줌
  • 28 x 28이니 W1X1 ... W784X784 + b가 된다.

 

 

학습 모델과 평가지표

 

학습 결과 

 

시각화

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

수업정리

 

 

 

적대적 생성 신경망

  • GAN : 예측 추론을 떠나서 생성해버림 -> 논란이 많이 생김
    • Generative Adversarial Networks의 약자로 우리말로는 “적대적 생성 신경망”
    • 서로 다른 두 개의 네트워크를 적대적으로(adversarial) 학습시키며 실제 데이터와 비슷한 데이터를 생성(generative)해내는 모델
    • 비지도 학습 기반 생성모델로 분류
  • epochs
    • 학습 횟수 
    • 학습 : 최적화
  • 머신러닝은 사람의 개입이 들어감
  • 딥러닝은 사람의 개입이 거의 안들어감
  • 알아서 해준다고 딥러닝만 사용한다는 건 적합하지 않는다
    • 상황에 따라 머신러닝 모델을 선택할 지 딥러닝 모델을 선택할지 성능을 더 잘 낼 모델을 찾아야함
  • 딥러닝
    • 컴퓨터비젼, 음성, 
    • 복잡하고 많은데이터에 유용

 

 

 


수업시작

 

 

딥러닝 실습 (신경망 모델)

 

 

모델 만들기

# 신경망 구조 설계
model = Sequential() # 딥러닝 모델을 구성하는 뼈대, 층을 쌓을 수 있게 도와줌
# input_shape(한행의 데이터의 컬럼 수,
model.add( InputLayer(input_shape=(1,)) ) # 입력층
# Dense 인공신경 망, 마지막은 1로 맞춰줘야 한다.
model.add(Dense(units=9))     # 신경 세포 망
model.add(Dense(units=9))
model.add(Dense(units=1))     # 출력층

 

 

 

데이터가 들어오는 곳

데이터의 크기 알려줘야함

다중,이진분류인지, 회귀 인지에 따라 마지막 뉴런의 units 수가 달라진다.

회귀 일때 units = 1

 

 

학습방법 및 평가 방법 설정

# 2. 신경망 모델 학습(loss, optimizer)/평가(metrics)방법 설정
model.compile( loss='mean_squared_error',
              optimizer='SGD')

 

학습 및 학습과정 시각화와 히스토리에 담아주기

# 3-1. 학습 및 학습과정 시각화 / 히스토리 생성
studentHistory = model.fit(X_train, y_train, epochs=100) # epochs : 최적회 학습 횟수

 

히스토리를 시각화

 

 

모델평가

# 4. 모델 평가
model.evaluate(X_test,y_test)

test 결과와의 loss 값 차이가 많이 벌어졌다 -> 과적합 된 듯 하다.

 

 

 

 

퍼셉트론 개념

  • 딥러닝의 근간
  • 이진 분류를 수행하는 데 사용
  • 입력과 가중치를 곱한 값들의 합이 임계값(threshold)을 초과하는 경우, 출력으로 1을 반환하고, 그렇지 않은 경우에는 0을 반환
  • 인공 신경망의 초창기 모델 중 하나
  • 단층 퍼셉트론과 다층 퍼셉트론으로 나뉘어짐
  • 단층 퍼셉트론은 선형 분리 가능한 문제에 대해서만 작동
  • 다층 퍼셉트론은 여러 개의 은닉층을 포함하며, 비선형적인 패턴을 인식하는 데 사용

 

역치

  • 어떤 값이나 수준을 기준
  • 이진 분류(Binary Classification)에서 사용되는 중요한 개념 중 하나
  • 어떤 입력값이 주어졌을 때 그 값이 역치보다 크면 1을, 작으면 0을 반환하는 함수를 만드는 데 사용
  • 분류의 성능에 매우 중요한 역할
  • 모델의 정확도를 향상시키는 데 큰 영향을 미

  • 자극이 역치 이상이 되어야 다음뉴런에게 전달이 되는 개념

 

 

  • 자극값을 다음 뉴런에게 넘길 지 말지 판단하는 활성화 함수 가 추가됨 (activation) 

  • 활성화 함수로 시그모이드 사용한 예시

 

 

  • 예측값이 활성화 함수를 만나야 다음 신경망으로 전달이 된다.
  • 예측값은 다음 뉴런층의 데이터값이 된다.

 

선형함수 모델과 활성화 함수까지 만나야 하나의 퍼셉트론이다.

선형함수 + 활성화함수 = 퍼셉트론

 

 

 

계단함수 

  • 계단함수이다.
  • 맨 처음 도입된 함수이지만 별로 좋지 않아서 지금은 쓰지 않는다

 

 

  • 영향력은 W 에 의함

 

XOR 이라는 문제가 생긴다.

 

 

둘다 True 여야 1이 나온다.

 

 

하나라도 1이면 1

 

둘다 같은 값이면 0

둘의 값이 달라야 1

 

이 문제점을 해결한 게 다층 퍼셉트론

 

 

 

 

 

 

 

 

 

유방암 데이터셋 분류 ( 이진분류 )

 

 

모델링

  • activation='sigmoid'
    • activation : 활성화 함수는 인공 신경망의 출력 값을 조정하는 함수
    • 'sigmoid' 함수는 입력 값을 0과 1 사이의 값으로 제한하는 함수
    • 이진분류 문제에서 자주 사용
  • 'validation_split = 0.2'
    • 전체 학습 데이터를 학습용 데이터와 검증용 데이터로 나누는 비율을 8:2로 설정
  •  Adam
    • RMSProp와 Momentum을 결합한 알고리즘으로, 지수 가중 이동 평균과 모멘텀을 이용하여 가중치를 업데이트

 

오차 확인

정확도 확인

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업 > 딥러닝' 카테고리의 다른 글

[딥러닝] 7일차 - 이미지 데이터 학습, 데이터 확장  (0) 2023.05.17
[딥러닝] 6일차 - cnn  (0) 2023.05.15
[딥러닝] 4일차 -  (0) 2023.05.10
[딥러닝] 3일차 - 다중분류 실습  (0) 2023.05.09
[딥러닝] 1일차  (0) 2023.05.02

 

 

 

딥러닝 개요

 

 

  • 통틀어서 인공지능이라 한다
  • 기계학습 - 사람을 흉내내게 한다.
    • 학습을 시켜서 사람이 하는 일을 하게 해보자
  • 인공세포를 네트워크화
  • NEURAL NETWORKS - NN

 

  • 기계는 학습결과를 둥근 자동차, 사고난 자동차 인경우 자동차가 아니다라고 결과를 낸다.

  • 기계보다 대상을 판단하는기준이 추상적이다.
  • 기계도 사람처럼 정확하진 않지만 좀더 추상적인 규칙에 따라서 도출하려는 학문이 딥러닝이다

  • 사람의 신경망을 모방 -> 병렬적 다층 구조를 통해 학습

 

 

뉴런이란? 

신경전달물질을 통해 신호를 전달하고 정보를 받아들이며 처리하는 역할
뉴런 내에서 신경전달은 전기적 신호로 전달,
뉴런 간의 신경전달은 시냅스를 통해 화학적 신호로 전달

 

 

  • 시각, 청각, 후각 등등 감각으로 들어온 정보신호로 판단(결과)를 내린다
  • 수많은 세포들이 연결 되어있음

 

딥러닝의 뉴런

하나의 뉴런 - 하나의 선형모델

 

  • 최초의 모델 ANN 
  • Perceptron 
    • 1957년에 제안한 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘
  • XOR - 11=0, 00=0, 10=1, 01=1 
  • MLP
  • LSTM
  • CNN - 과적합 문제
  • Vanishing Gradient 가중치가 사라짐
  • SVM, Random forest
  • 마지막 Alphago 까지 등장

 

머신러닝에서는 사이킷런 모델 사용

딥러닝에서는 keras 모델, 텐서플로우 등 사용

 

 

 

GAN

  • 서로 경쟁하는 두 개의 신경 네트워크 시스템

최대한 진짜같은 모델을 만들어내는게 목적이다.

 

 

딥러닝 과정

  • 데이터를 입력
  • 학습
  • 예측
  • 실제값과 예측값의 오차
  • optimizer (최적화)
  • 에러가 최소화 될 수 있도록 알아서 조절해 나간다
  • 퍼셉트론, CNN, RNN 

 

기존의 머신러닝과 딥러닝의 차이점

  • 사람이 직접 특성을 선별하지 않아도된다.
  • 사람의 손을 타지 않는다.
  • 시각화도 필요없다.
  • 딥러닝 모델이 알아서 가중치 계산
  • 그럼 왜 머신러닝을 배웠나? 그 이유는... 밑에

 

  • 간단한 걸 사러 집 앞 편의점 가는데 트럭을 탈것인가 자전거를 살 것인가? => 자전거
  • 시간적 비용
  • 문제에 따라서 적절한 방식을 사용한다.
  • 가벼운 데이터 등 머신러닝 사용 적합

 

딥러닝 사용 적합 용도

  • 음성 데이터, 수백만개의 데이터 등 딥러닝 사용 적합
    • 컴퓨터 비젼(영상, 이미지 처리), 음성 인식, 자연어 처리, 신호처리 등의 분야에 적용

 

딥러닝 하면  Keras

  • 블록조립하듯이 조립
  • 직접 설계를 해야한다.
  • 머신러닝은 모델을 가져와서 사용만 했다면 딥러닝은 내가 쌓아서 모델을 만든다.
  • 원래는 텐서플로우가 있고 케라스가 있다
    • 케라스가 인기가 많아지다 보니 케라스가 텐서플로우를 가져와서 하위모델로 사용했다.
    • import tensorflow.keras 하는 것처럼

 

학습용 컴퓨터의 gpu가 따라주지 않아 구글에서 제공하는 코랩을 사용하여 실습해보자

 

colab 검색

 

 

새 노트 클릭

 

 

단축키 보기

 

 

 

데이터 다운로드 사이트

http://archive.ics.uci.edu/ml/datasets/Student+Performance 

Data Folder 클릭

 

student.zip 클릭하여 다운로드

 

압축 풀기

 

학생 성적에 대한 데이터이다.

student-mat.csv 사용

 

colab 에 외부파일 연결

  • 구글 드라이브에 데이터를 올리고 연동을 시켜서 드라이브에 파일을 업로드함

colab notebooks 폴더 들어가기

여기에 옮길 예정

파일을 드래그 앤 드랍 한다.

잘 들어간 것을 확인할 수 있다.

 

 

리눅스 명령어 사용가능

 

 

드라이브 마운트

 

연결하기

 

 

 

 

 

 

 

 

 

 

 

데이터 로딩

 

 

 

딥러닝은 선형 모델이 근간이고 기본 바탕이다

 

 

 

 

 

 

 

 

+ Recent posts