
3장 [Neural Network] 다차원 배열 계산
2025. 9. 6. 12:19
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
다차원 배열의 계산넘파이의 다차원 배열을 사용한 계산법을 숙달하면 신경망을 효율적으로 구현할 수 있음.신경망에서 행렬의 곱이 중요한 부분이기에 정확하게 파악하고 넘어가기. 다차원 배열다차원 배열도 그 기본은 '숫자의 집합'임숫자가 한 줄로 늘어선 것이나 직사각형으로 늘어놓은 것, 3차원으로 늘어놓은 것이나 (더 일반화한) N차원으로 나열하는 것을 통틀어 다차원 배열이라고 함. 1차원 배열import numpy as npA = np.array([1, 2, 3, 4])print(A) # [1 2 3 4]print(np.ndim(A)) # 1print(A.shape) # (4,)print(A.shape[0]) # 4배열의 차원 수는 np.ndim() 함수로 확인할 수 있음. 또, 배열의 형상은 인스턴스 변..
3장 [Neural Network] ReLU 함수
2025. 9. 5. 10:41
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
ReLU 함수입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하면 0을 출력하는 함수.💡 왜 ReLU 함수를 딥러닝에서 많이 사용할까?은닉층 뉴런에 입력값이 큰 경우, 시그모이드 함수는 출력이 거의 1에 붙어버려 미분 값(기울기)이 거의 0이 됨 → 학습이 멈춤(기울기 소실)ReLU 함수는 출력이 그대로 커지고, 미분 값은 항상 1 → 학습이 잘 진행됨 수식으로 표현한 ReLU 함수 코드와 그래프로 보는 ReLU 함수넘파이의 maximum 함수를 사용함.def relu(x): return np.maximum(0, x)x = np.arange(-5.0, 5.0, 0.1)y = relu(x)plt.plot(x, y)plt.ylim(-0.1, 1.1) # y축 범위 지정plt.show()
3장 [Neural Network] 활성화 함수(시그모이드 함수, 계단 함수)
2025. 9. 4. 19:00
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
활성화 함수(actication function)란?입력 신호의 총합을 출력 신호로 변환하는 함수입력값 x₁, x₂에 가중치를 곱하고, 편향 b 더해서, 활성 함수에 넣어 y 출력먼저 a라는 중간 합을 계산그걸 h()에 넣어 y 출력같은 계산이고 수학적 차이는 없음. 다만 가중합과 출력을 구분해서 역할에 따라 나누는게 코딩하기 편리하기에 구분을 함 활성화 함수시그모이드 함수exp(-x)는 e^{-x} 를 뜻하며 e는 자연상수로 2.7182...의 값을 갖는 실수임.예를 들어 시그모이드 함수에 1.0과 2.0을 입력하면 h(1.0) = 0.731..., h(2.0) = 0.880... 처럼 특정 값을 출력함. 시그모이드 함수 구현하기def sigmoid(x): return 1 / (1 + np.e..
3장 [Neural Network] 퍼셉트론과 신경망
2025. 9. 3. 17:56
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
퍼셉트론과 신경망퍼셉트론 = 논리 게이트를 흉내 내는 작은 계산기입력을 받아서 → 가중치 곱하고 → 합한 다음 → 임계값 넘으면 1, 아니면 0을 출력.예를 들어 AND, OR 같은 간단한 연산은 퍼셉트론 하나로도 가능. 하지만 XOR는 퍼셉트론 여러 개를 조합해야 했음. 신경망은?여러 개의 퍼셉트론을 층(layer)으로 연결한 것.한 층의 출력이 다음 층의 입력이 돼서, 더 복잡한 계산을 할 수 있음.퍼셉트론이 레고 블록 하나라면, 신경망은 그 블록을 쌓아서 건물을 만든 것.퍼셉트론을 확장한 개념으로 단일 퍼셉트론이 못 풀던 XOR 도, 퍼셉트론 여러 개를 쌓으면 해결 가능함. 다시 쉽게 말해서퍼셉트론은 "조건을 만족하면 1, 아니면 0" → 단순한 구분자신경망은 퍼셉트론 수백・수천 개가 서로 연결돼서..

2장 [Perceptron] 퍼셉트론의 한계와 XOR 게이트
2025. 9. 2. 17:07
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
XOR 게이트XOR 게이트는 배타적 논리합이라는 논리 회로임x₁, x₂ 중 한쪽이 1일 때만 1을 출력('배타적이란 자기 외에는 거부한다는 의미)퍼셉트론으로는 이 XOR 게이트를 구현할 수 없음. 이유는 1이 출력되는 영역을 직선 하나로 표현할 수 없기 때문. 퍼셉트론이 정확히 뭔데?퍼셉트론은 본질적으로 이런 직선 하나로 분리하는 모델임. 그럼 XOR을 못만드는 것일까?퍼셉트론을 여러 개 조합(다층)하면 가능함!1층에서 NAND 퍼셉트론 + OR 퍼셉트론 만들고2층에서 AND 퍼셉트론으로 두 출력을 결합! XOR 게이트 구현하기다층 퍼셉트론으로 구현 가능. 다시말해 단층 퍼셉트론으로 표현하지 못한 것을 층을 하나 늘려 구현할 수 있음def XOR(x1, x2): s1 = NAND(x1, x2) ..
2장 [Perceptron] 퍼셉트론 구현하기
2025. 9. 1. 15:50
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
간단한 구현x1과 x2를 인수로 받는 AND 함수def AND(x1, x2): w1, w2, theta = 0.5, 0.5, 0.7 tmp = x1*w1 + x2*w2 if tmp theta: return 1print(AND(0, 0)) # 0print(AND(1, 0)) # 0print(AND(0, 1)) # 0print(AND(1, 1)) # 1 가중치와 편향 도입위의 수식에서 θ를 -b로 치환하면 아래와 같이 표현할 수 있음여기서 b를 편향(bias)이라 하며 w₁, w₂는 가중치임. 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력함.이를 넘파이를 사용해 구현해보자.import numpy as n..

2장 [Perceptron] 단순한 논리 회로(AND, NAND, OR)
2025. 8. 31. 15:00
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
1. AND 게이트입력 신호와 출력 신호의 대응 표를 진리표라고 함. 아래의 그림은 AND 게이트의 진리표로 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력함.AND 게이트 진리표를 만족하는 매개변수 조합은 (0.5, 0.5, 0.7) 등 무수히 많음. 2. NAND 게이트와 OR 게이트NAND는 Not AND를 의미하며, 그 동작은 AND 게이트의 출력을 뒤집은 것이 됨.NAND 게이트를 표현하려면 (w₁, w₂, θ) = (-0.5, -0.5, -0.7) 조합이 있음. 사실 AND 게이트를 구현하는 매개변수의 부호를 모두 반전하면 NAND 게이트가 됨. OR 게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로임더보기💡 여기서 퍼셉트론의 매개변수 값을 정하는 것은 ..
2장 [Perceptron] 퍼셉트론 정의
2025. 8. 30. 14:24
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
퍼셉트론이란?퍼셉트론은 신경망(딥러닝)의 기원이 되는 알고리즘.퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력함.전류가 전선을 타고 흐르는 전자를 내보내듯, 퍼셉트론 신호도 흐름을 만들고 정보를 앞으로 전달함. 다만 실제 전류와 달리 '흐른다/안 흐른다(1이나 0)'의 두가지 값을 가지고 있음. x₁, x₂ 는 입력 신호, y는 출력 신호, w₁, w₂는 가중치(weight)라고 하고, 그림의 원을 뉴런 혹은 노드라고 부름.입력 신호가 뉴런에서 보내질 때는 각각 고유한 가중치가 곱해짐(w₁x₁, w₂x₂).뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력(이를 '뉴런이 활성화'한다고 표현함). 그 한계를 임계값이라 하며,θ 기호(세타 theta)로 나타냄.이게 퍼셉트론의 동작..
1장 [Python] matplotlib
2025. 8. 29. 12:49
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
matplotlib그래프를 그려주는 라이브러리로 matplotlib을 사용하면 그래프 그리기와 데이터 시각화가 쉬워짐 단순 그래프 그리기sin 함수 그리기import numpy as npimport matplotlib.pyplot as plt# 데이터 준비x = np.arange(0, 6, 0.1) # 0에서 6까지 0.1 간격으로 생성y = np.sin(x)# 그래프 그리기plt.plot(x, y)plt.show() pyplot의 기능cos 함수 추가로 그리기# 데이터 준비x = np.arange(0, 6, 0.1) # 0에서 6까지 0.1 간격으로 생성y1 = np.sin(x)y2 = np.cos(x)# 그래프 그리기plt.plot(x, y1, label="sin")plt.plot(x, y2, lin..
1장 [Python] 넘파이 기본 문법 정리
2025. 8. 28. 12:04
머신러닝&딥러닝/밑바닥부터 시작하는 딥러닝
넘파이의 산술 연산x = np.array([1.0, 2.0, 3.0])y = np.array([2.0, 4.0, 6.0])print(x + y) # 원소별 덧셈print(x - y) # 원소별 뺄셈print(x * y) # 원소별 곱셈print(x / y) # 원소별 나눗셈---[3. 6. 9.][-1. -2. -3.][ 2. 8. 18.][0.5 0.5 0.5]여기서 주의할 점은 배열 x, y의 원소 수가 같음. 원소 수가 다르면 오류가 발생함 넘파이의 N차원 배열A = np.array([[1, 2], [3, 4]])print(A)print(A.shape)print(A.dtype)# 결과[[1 2] [3 4]](2, 2)int64B = np.array([[3, 0], [0, 6]])print(A + ..