본문 바로가기
반응형

DATA Science/DeepLearing from scratch10

딥러닝 딥러닝의 특징 과제 가능성 최근 딥러닝 기술들 심층신경망 위와 같이 구성된 CNN을 만들어보자 여기에서 사용되는 합성곱 계층은 3X3 크기의 필터고 층이 깊어지면서 채널 수가 늘어나는 것이 특징이다. (합성곱 계층 채널 수는 16, 16, 32, 32, 64, 64로 늘어난다) 풀링계층을 추가하여 중간 데이터의 공간 크기를 줄여 간다. 3X3의 필터를 사용한 합성곱 계층 활성화 함수는 ReLU 완전연결 계층 뒤에 드롭아웃 계층 사용 Adam을 사용해 최적화 가중치 초기값은 'He'의 초기값 import sys, os sys.path.append(os.pardir) # 부모 디렉터리의 파일을 가져올 수 있도록 설정 import pickle import numpy as np from collections i.. 2021. 5. 23.
CNN --- 합성곱 신경망 합성곱 - 두 함수 중 반전(reverse), 이동(shift)시켜가며 나머지 함수와의 곱을 연이어 적분하는 것 CNN은 주로 이미지 인식과 음성인식등 다양한 곳에서 사용하는데 특히 이미지 인식에서 기초로 많이 쓰인다. 전체 구조 지금까지 했던 신경망은 인접하는 계층의 모든 뉴런과 결합하여 만드는 완전연결 이엇으며, 이 완전히 연결된 계층을 Affine 계층이라는 이름으로 구현했습니다. 이 완전연결망은 Affine - ReLu 조합이후 마지막에 Affine-Softmax 에서 최종결과를 출력한다. CNN은 완결연결망에서 '합성곱 계층'과 '풀링 계층'이 추가된다. 즉, 'Conv - ReLU - (Pooling)' 으로 연결된다. (마지막은 Affine - Softmax) 합성곱 계층 각 계층 사이에는 .. 2021. 5. 20.
딥러닝 학습 관련 기술들 가중치 매개변수의 최적값을 탐색하는 최적화방법 가중치 매개변수 초깃값 하이퍼파라미터 설정방법 가중치 감소, 드롭아웃등 정규화 방법 배치정규화 위와 같은걸 할 예정이다. 매개변수의 갱신 신경망 학습의 목적: 손실 함수의 값을 가능한 한 낮추는 매개변수를 찾는것 이것은 매개변수의 최적 값을 찾는 문제이며, 이러한 문제를 푸는것을 최적화 라고 한다. 여태까지 최적화를 확률적 경사 하강법(SGD)인 매개변수의 기울기를 구해서 기울어진 방향으로 매개변수값을 갱신했다. 이것과 다른방법을 알아보자 확률적 경사 하강법 SGD W는 갱신할 가중치 매개변수이고 dL/dW는 W에 대한 손실함수의 기울기이다. η은 학습률인데 실제로는 0.01이나 0.001과 같은 값을 미리 정해서 사용한다. ←는 우변의 값으로 좌변의 값을 .. 2021. 5. 17.
오차역전파법 수치미분을 통하여 신경망의 가중치 매개변수를 구했지만 수치미분은 시간이 오래걸린다. 계산그래프 계산 그래프를 통하여 계산과정을 알아보면 오차역전파법을 잘 이해할수 있다. 위처럼 어떠한 값을 수식에 넣고 계산해 나가는 것이 계산그래프 같은것. 문제의 흐름을 살펴 보면 1. 계산 그래프를 구성 2. 그래프에서 계산을 왼쪽에서 오른쪽으로 진행한다. 이처럼 왼쪽에서 오른쪽으로 진행하는 단계를 순전파(forward propagation)라고 한다. 이것을 반대로 한다면 역전파(backward propagation) 라고 한다. 계산그래프를 사용하는 목적은 국소적계산과 역전파를 통해 '미분'을 효율적으로 계산할 수 있는 점에 있다. 국소적계산 - 각 노드에서 단순한 계산을 하고 중간에 저장을 할수 있다. 역전파를 .. 2021. 5. 14.
신경망 학습 - 학습 알고리즘 구현 신경망 학습의 절차 전제 신경망에는 적응 가능한 가중치와 편향이 있고 이 가중치와 편향을 훈련데이터에 적응하도록 조정하는 과정을 '학습' 이라한다. 1단계 - 미니배치 훈련데이터중 일부를 무작위로 가져옵니다. 이렇게 선별한 데이터를 미니배치라 하며, 그 미니배치의 손실함수 값을 줄이는 것이 목표이다. 2단계 - 기울기 산출 미니배치의 손실 함수 값을 줄이기 위해 각 가중치 매개변수의 기울기를 구한다. 기울기는 손실 함수의 값을 가장 작게 하는 방향을 제시한다. 3단계 - 매개변수 갱신 가중치 매개변수를 기울기 방향으로 아주 조금 갱신한다. 4단계 - 반복 이것은 경사하강법으로 매개변수를 갱신하는 방법이며, 이때 데이터를 미니배치로 무작위로 선정하기 때문에 확률경사하강법(SGD)라고 부른다. 이제 손글씨 .. 2021. 5. 13.
신경망 학습 학습? - 훈련 데이터로부터 가중치 매개변수의 최적값을 자동으로 획득하는 것 여기서는 신경망이 학습할수 있도록 해주는 지표인 손실 함수를 소개합니다. 학습의 목표는 이 손실함수의 결과값을 작게 만드는 가중치 매개변수를 찾는것이다. 신경망은 데이터를 보고 학습할수 있다. 즉, 가중치 매개변수의 값을 데이터를 보고 자동으로 결정한다. (층이 깊은 딥러닝은 수억개가 된다.) Feature(특징) : 입력데이터에서 본질적인 데이터를 정확하게 추출할 수 있도록 설계된 변환기. MachineLearning : 모아진 데이터로부터 규칙을 찾아내는 역할을 기계가 담당 입력값을 벡터로 변환할 때 사용하는 특징은 여전히 사람이 한다.(안해도 되지만 하면 좋은결과) 딥러닝을 end-to-end machine learing이.. 2021. 5. 12.
신경망 신경망을 쓰는 이유 1개 이상의 은닉층을 가진 (polynomial이 아닌 비선형 활성 함수여야 함) 뉴럴 네트워크는 어떠한 연속 함수든 근사할 수 있다는 이론인 Universal approximation theorem이 있습니다. 이를 위해서 "비선형 활성함수"를 가지는 뉴럴 네트워크를 사용하는 것이고요, 선형 활성함수는 아무리 여러 층을 쌓아도 한층만 쌓고 선형 활성함수를 씌운 것과 결과적으로 같게 됩니다. 은닉층을 "깊게" 쌓는 이유는 데이터로부터 특성을 더 잘 잡아내기 위해서 입니다. Visualizing and Understanding Convolutional Networks라는 유명한 논문의 figure를 보시면 각 은닉층마다 잡아내는 피쳐들이 다른 것을 확인하실 수 있습니다. 라고 tenso.. 2021. 5. 12.
퍼셉트론 퍼셉트론 - 다수의 신호를 입력받아 하나의 신호를 출력하는 것 거의 이걸 기초로 모델을 만든다. 논리회로 w1, w2,θ = 0.5, 0.5, 0.7일 때 일치 w1, w2,θ = -0.5, 1.0, 1.0일 때 일치 w1, w2,θ 보통 논리회로는 and, or, nand, xor인데 여기 xor이 없다. 나중에 없는 이유를 설명~하겠다 퍼셉트론 구성 구성하기 앞서 위에서 구성한 식에서 임계값θ를 좌항으로 이항 시켜 b로 바꾼다. b는 bias(편향)이라 부른다. AND게이트 구성 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import numpy as np def AND(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5]).. 2021. 5. 11.
Matplotlib - 그래프 In [1]: from IPython.core.display import display, HTML display(HTML("")) #창 맞추기위함 Matplotlib : 그래프 그려주는 라이브러리, 즉 시각화¶ In [9]: import numpy as np import matplotlib.pyplot as plt #데이터 x = np.arange(0,6,0.1) # 0~6 까지 0.1간격으로 생성 range랑 비슷? y = np.sin(x) # sin 함수넣어줌 #그래프 plt.plot(x,y) plt.show() 그래프에 제목과 축이름등을 사용해보자!!!¶ In [13]: import numpy as np import matplotlib.pyplot as plt #데이터 x = np.arange(0,.. 2021. 5. 11.
Numpy - 행렬연산 Numpy를 처음 접햇을때 리스트를 사용하면되지 굳이? 라는 잠깐의 의문을 가졌으나¶배열 연산은 정말로 까다롭고 구현하기 귀찮아서 Numpy가 정말 좋다는걸 느낄수 있엇다. ㅎㅎㅎ¶ In [26]: from IPython.core.display import display, HTML display(HTML("")) #창 맞추기위함 NUMPY¶ In [8]: import numpy as np x = np.array([1.0, 2.0, 3.0]) In [3]: print(x) [1. 2. 3.] In [4]: type(x) Out[4]: numpy.ndarray 별차이가 없어보인다¶ In [5]: a=[1,2,3] b=[2,3,4] In [6]: a+b Out[6]: [1, 2, 3, 2, 3, 4] In [.. 2021. 5. 11.
반응형