인공지능 74

[머신러닝 - 이론, Python] 활성화 함수 - 소프트맥스 함수 구현 (Activation Function - Softmax Function Implementation)

머신러닝에서 출력은 분류(Classfication)와 회귀(Regression)가 있습니다. 분류는 해당 데이터가 어느 클래스에 속하느냐의 문제이고, 회귀는 해당 데이터의 연속적인 수치를 예측하는 문제입니다. 회귀의 경우 항등 함수를 이용해서 입력 신호를 그대로 출력해도 되지만, 분류의 경우에는 보통 소프트맥스 함수를 사용합니다. 소프트맥스 함수는 다음과 같습니다. \(y_k = \frac{exp(a_k)}{\sum_{i = 1}^{a} exp(a_i)}\) 따라서 분모는 모든 입력 신호를 exp()해서 더한 값이고, 분자는 원하는 k의 입력신호 a_k의 지수 함수가 됩니다. 따라서 코드로 구현하면 다음과 같습니다. import numpy as np def softmax(a): exp_a = np.exp..

[머신러닝 - Python] 3층 신경망 구현 (3 Layer Neural Network Implementation)

import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def identity_function(x): # 항등 함수, 이 또환 활성화 함수임 return x def init_network(): network = dict() network['W1'] = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) network['b1'] = np.array([0.1, 0.2, 0.3]) network['W2'] = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) network['b2'] = np.array([0.1, 0.2]) network['W3'] = np.array([[0.1, 0.3], ..

[머신러닝 - Python] 활성화 함수 - 렐루 함수 구현 (Activation Function - ReLU Function Implementation)

최근에 많이 사용하고 있는 활성화 함수의 비선형 함수로는 ReLU 함수가 있습니다. ReLU 함수는 0보다 작은 값에 대해서는 0을 출력하고, 0이 넘으면 그 값을 출력하는 함수입니다. 즉 식은 아래와 같습니다. \(h(x) = \left\{\begin{matrix} x & x > 0 \\ 0 & x \leq 0 \\ \end{matrix}\right.\) 간단하죠? 이를 코드로 구현해보겠습니다. import numpy as np import matplotlib.pyplot as plt def ReLU(x): return np.maximum(0, x) x = np.array([-1.0, 1.0, 2.0]) print(ReLU(x)) x = np.arange(-5.0, 5.0, 0.1) y = ReLU(x..

[머신러닝 - 이론] 활성화 함수에서 비선형 함수를 사용해야 하는 이유 (Why We Use nonlinearlly function in Activation Function)

신경망에서 활성화 함수는 비선형 함수를 사용해야 합니다. 앞에서 본 계단 함수나 시그모이드 함수 모두 비선형 함수입니다. 그렇다면 선형함수는 무엇일까요? 선형함수는 y = ax + b와 같이 x 값의 배수를 출력하는 함수를 말합니다. 즉 1개의 곧은 직선이 됩니다. 왜 선형 함수는 사용하면 안 될까요? 바로 은닉층을 깊게하는 의미가 없어지기 때문입니다. 예를 들어 활성화 함수 h(x) = cx라고 가정해봅시다. 이때 3층 네트워크라고 가정하면 y = h(h(h(x)))가 되고, 이는 c^3 x와 같습니다. 근데 a = c^3이라고 한다면? 그냥 y = ax와 다를게 없습니다. 즉, 층을 깊게하는 의미가 없어지는 겁니다. 따라서 우리는 활성화 함수를 필연적으로 비선형 함수를 이용해야합니다. 그래야 층을 쌓..

[머신러닝 - Python] 활성화 함수 - 시그모이드 함수 구현 (Activation Function - Sigmoid Function Implemetation)

앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.10.18 - [Computer Science/머신러닝] - [머신러닝 - 이론] Logistic Regression (로지스틱 회귀) [머신러닝 - 이론] Logistic Regression (로지스틱 회귀) 앞의 글을 읽으시면 이해에 도움이 됩니다. 2022.05.07 - [Computer Science/머신러닝] - [머신러닝 - Python] 활성화 함수 - 시그모이드 함수 구현 (Activation Function - Sigmoid Function Implemetation) [머신러닝 - Python] hi-guten-tag.tistory.com 퍼셉트론은 계단 함수를 사용하지만, 이는 활성화 함수의 일부일 뿐이다. 실제로 제대로 된 신경망을 ..

[머신러닝 - Python] 활성화 함수 - 계단 함수 구현 (Activation Function - Step Function Implementation)

계단 함수는 0이하의 값에 대해 0을 출력하고, 0초과의 값에 대해서는 1을 출력한다. numpy 배열에 대해서 각각 계산을 할 수 있게 만들면 코드는 아래와 같다. import numpy as np import matplotlib.pyplot as plt def step(x): return np.array(x > 0, dtype=np.int64) x = np.arange(-5.0, 5.0, 0.1) y = step(x) plt.plot(x, y) plt.ylim(-0.1, 1.1) plt.show() 실제로 -5.0 부터 5.0까지 0.1 간격으로 벡터를 만들어서 넣었는데, 이런 형태의 함수가 나오게 된다. 참고로 x > 0만 하면 True, False 값으로 나오는데 이를 dtype = np.int6..

[머신러닝 - Python] 퍼셉트론 - XOR 게이트 구현 (Perceptron - XOR Gate Implementation)

XOR 게이트는 단순한 1층 퍼셉트론으로는 구현할 수 없습니다. 반면 AND, NAND, OR 게이트는 직선으로만 구분할 수 있습니다. 반면 XOR 게이트는 직선으로 표현할 수 없습니다. 이해가 되시나요? 따라서 XOR은 '비선형'으로만 표현할 수 있습니다. 방법은 간단합니다. AND, OR, NAND를 조합하면 됩니다. 따라서 XOR = AND(OR, NAND)과 같습니다. 간단하죠? 코드는 아래와 같습니다. def XOR(x1, x2): s1 = NAND(x1, x2) s2 = OR(x1, x2) y = AND(s1, s2) return y for i in [0, 1]: for j in [0, 1]: print(f'{i, j}', end=' ') print() print('XOR : ', end = ..

[머신러닝 - Python] 퍼셉트론 AND, NAND, OR 게이트 구현 (Perceptron AND, NAND, OR Gate implementation)

import numpy as np def AND(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5]) b = -0.7 tmp = np.sum(w * x) + b if tmp 0: return 1 def NAND(x1, x2): x = np.array([x1, x2]) w = np.array([-0.5, -0.5]) b = 0.7 tmp = np.sum(w * x) + b if tmp 0: return 1 def OR(x1, x2): x = np.array([x1, x2]) w = np.array([0.5, 0.5]) b = -0.2 tmp = np.sum(w * x) + b if tmp 0: return 1 for i in [0, 1]: for j in [..

[머신러닝 - 이론] 강화 학습의 기초 (Fundamental of Reinforcement Learning)

강화 학습을 잘 모를 수 있지만, 알파고를 모를 수는 없습니다. 알파고는 강화 학습을 통해 학습된 모델입니다. 이처럼 강화학습은 요즘 가장 흥미진진한 분야이자 가장 오래된 분야 중 하나입니다. 사람은 주위를 센싱하고 인식하여 적절한 행위를 통해 환경과 상호작용합니다. 인공지능 제품도 비슷한 과정을 수행해야 쓸모가 있습니다. 1. 에이전트 (Agent) 일상생활에서 에이전트 (Agent)란 특정한 일을 대행해주는 사람을 뜻합니다. 강화 학습에서의 에이전트는 관측을 하고 주어진 환경에서 행동을 합니다. 그리고 그 결과로 보상을 받습니다. 에이전트의 목적은 보상의 장기간 기대치를 최대로 만드는 행동을 학습하는 것입니다. 목적지에 도착하면 양의 보상을 받고, 시간을 낭비하거나 잘못된 방향으로 향하면 음의 보상을..

[머신러닝 - 이론] RNN과 LSTM

1. 시계열 데이터 시계열 데이터란 시간, 순서 정보가 들어 있는 데이터를 말합니다. 문장이 있다면 단어가 나타나는 순서가 중요합니다. 또한 일별 온도를 기록한 데이터가 있다면 날짜의 순서가 중요합니다. 이처럼 데이터에 순서나 시간이 들어가 있는 데이터를 시계열 데이터(time series data)라고 합니다. 시계열 데이터의 독특한 특성에 대해 알아보겠습니다. 요소의 순서가 중요 "세상에는 시계열 데이터가 참 많다"를 "시계열 참 데이터가 많다 세상에는"으로 바꾸면 의미가 훼손됩니다. 샘플의 길이가 다름 짧은 발음 "인공지능"과 긴 발음 "인 ~공~~~지능"이 다름 문맥 의존성 "시계열은 앞에서 말한 바와 ... 특성이 있다"에서 "시계열은"과 "특성이 있다"는 밀접한 관련성이 있음 계절성 미세먼지 ..