Deep Learning & AI/AI

(딥러닝 _ 온라인)쉽게 배우는 역전파 학습법 _ 수치 미분을 이용한 심층 신경망 학습

MINSU KANG 2021. 5. 9. 09:06

참고) 해당 포스팅은 패스트 캠퍼스 100% 환급 챌린지 미션 기록용 포스팅이며, 강좌 내용에 맞추어 포스팅함을 언급

 

클립명 : PART4)딥러닝의 3 STEP의 기초

           쉽게 배우는 역전파 학습법 (STEP 2) - 학습법의 수식적 이해 - 2

           쉽게 배우는 역전파 학습법 (STEP 2) - 수치 미분을 이용한 신경망 학습 - 1

           쉽게 배우는 역전파 학습법 (STEP 2) - 학습법의 수식적 이해 - 1

 

본 포스팅에서는 수치 미분을 이용한 심층 신경망 학습에 대한 코드구현을 살펴본다. 일부 구현이고, 이와 관련된 두번째 포스팅에서 완성을 하는 단계로 거쳐나간다



import time
import numpy as np

epsilon = 0.0001
def _t(x):
    return np.transpose(x)

def _m(A, B):
    return np.matmul(A, B)

def sigmoid(x):
    return 1 / (1+np.exp(-1))

def mean_squared_error(h, y):
    return 1 / 2*np.mean(np.square(h - y))


class Neuron:
    def __init__(self, W, b, a):
        # Model Parameter
        self.W = W
        self.b = b
        self.a = a
        
        # Gradients
        self.dW = np.zeros_like(self.W)
        self.db = np.zeros_like(self.b)
    
    def __call__(self, x):
        return self.a(_m(_t(self.W), x) + self.b) # activation(W^T)x + b


class DNN:
    def __init__(self, hidden_depth, num_neuron, num_input, num_output, activation = sigmoid):
        def init_var(i, o):
            return np.random.normal(0.0, 0.01, (i,o)), np.zeros((o,)) #출력 init W & init b
        
        self.sequence = list()
        #First hidden layer
        W, b = init_var(num_input, num_neuron)
        self.sequence.append(Neuron(W, b, activation))
        
        # Hidden layers
        for _ in range(hidden_depth - 1):
            W, b = init_var(num_neuron, num_neuron)
            self.sequence.append(Neuron(W, b, activation))
        
        # Output layer
        W, b = init_var(num_neuron, num_output)
        self.sequence.append(Neuron(W, b, activation))
        
        def __call__(self, x):
            for layer in self.sequence:
                x = layer(x)
            return x
        
        def calc_gradient(self, x, y, loss_func):
            def get_new_sequence(layer_index, new_neuron): # 특정 layer을 
                new_sequence = list()
                for i, l in enumerate(self.sequence):
                    if i == layer_index:
                        new_sequence.append(new_neuron) # 새로운 뉴런으로 교체
                    else:
                        new_sequence.append(layer)
                return new_sequence
            
            def eval_sequence(x, sequence):
                for layer in sequence:
                    x = layer(x)
                return x
 

(글자수 : 1500자 이상)

강의 소개 링크 : bit.ly/3cx6kMd

 

딥러닝/인공지능 올인원 패키지 Online. | 패스트캠퍼스

Tensorflow2.0부터 Pytorch까지 딥러닝 대표 프레임워크를 정복하기. 생활 깊숙이 침투한 인공지능, 그 중심엔 딥러닝이 있습니다. 가장 강력한 머신러닝의 툴로서 주목받는 딥러닝은 생각보다 어려

fastcampus.co.kr