SMALL

deep learning 8

MLP를 행렬로 표현하기: 왜 비선형 Activation이 필요할까?

MLP를 행렬로 표현하기이번에는 MLP, 즉 다층 퍼셉트론을 행렬과 벡터로 표현해보고자 한다.처음에는 뉴런 하나하나의 식을 직접 쓰는 방식이 더 직관적일 수 있다. 예를 들어 입력값이 `x1`, `x2`이고, 어떤 노드 하나로 들어가는 weight가 `w1`, `w2`, bias가 `b1`이라면 다음처럼 쓸 수 있다.x1 * w1 + x2 * w2 + b1이 식은 하나의 노드에 들어가는 값을 계산한 것이다. 그런데 노드가 많아지고 layer가 깊어지면 이런 식을 하나하나 쓰는 것은 너무 복잡해진다.그래서 신경망은 보통 행렬과 벡터를 이용해서 표현한다. 하나의 layer를 행렬로 표현하기입력값이 두 개 있다고 하자.x = [x1, x2] 그리고 첫 번째 hidden layer에 노드가 3개 있다고 해보자..

STUDY/ML DL 2026.05.11

Training, Validation, Test 데이터와 K-Fold Cross Validation

Training, Validation, Test DATA딥러닝을 공부하다 보면 `training data`, `validation data`, `test data`라는 말을 자주 보게 된다. training data는 모델을 학습시키는 데이터이고, test data는 학습이 끝난 모델을 평가하는 데이터이다. 그런데 validation data는 조금 헷갈릴 수 있다.학습 데이터도 아니고, 최종 테스트 데이터도 아닌 것 같은데 왜 필요한지 애매하기 때문이다. 이번 글에서는 training, validation, test data의 차이를 먼저 정리하고, 이어서 K-fold cross validation까지 살펴보고자 한다. Training dataTraining data는 모델을 직접 학습시키는 데이터이..

STUDY/ML DL 2026.05.09

NumPy : reshape, transpose, squeeze, newaxis

reshapereshape()는 배열의 모양을 바꾸는 함수이다. np.random.randint(-1, 5, size=(12,))는 -1 이상 5 미만의 정수 중에서 랜덤하게 12개를 뽑아 1차원 배열을 만든다.a = np.random.randint(-1, 5, size=(12,))print(a)print(a.shape)[ 2 1 -1 2 2 3 1 2 1 3 0 4](12,) reshape(2, 2, 3)은 원소 12개짜리 배열을 2×2×3 형태로 바꾼다.2행 3열 짜리의 데이터가 2개 있다는 뜻이다. (데이터 개수, 행, 열)b = a.reshape(2, 2, 3)print(b)[[[ 2 1 -1] [ 2 2 3]] [[ 1 2 1] [ 3 0 4]]] 중요한 점..

STUDY/ML DL 2026.05.09

NumPy 기초 함수 정리: 수학 연산, 통계, axis

NumPy 주요 함수 정리이번 글에서는 numpy에서 자주 사용하는 수학 함수, 통계 함수를 정리해보고자 한다.numpy는 단순히 배열을 만드는 것뿐만 아니라, 배열 안의 값에 대해 여러 수학 연산을 한 번에 수행할 수 있다.특히 딥러닝이나 데이터 분석에서는 배열 전체에 대해 계산을 수행하는 일이 많기 때문에 이런 함수들을 익혀두는 것이 중요하다. 기본 수학 함수먼저 랜덤한 3행 3열 배열을 하나 만들어보자. np.random.randn(3, 3)은 정규분포를 따르는 랜덤 값을 이용해 3행 3열 배열을 만든다. 실행할 때마다 값은 달라질 수 있다.a = np.random.randn(3, 3)print(a) 예시) 다음과 같은 배열이 만들어졌다.[[ 0.03199567 -0.18005751 -0.43230..

STUDY/ML DL 2026.05.08

numpy : 배열 인덱싱과 슬라이싱, boolean 인덱싱

배열 인덱싱과 슬라이싱numpy 배열도 파이썬 리스트처럼 인덱싱과 슬라이싱이 가능하다.다만 2차원 배열에서는 행과 열을 기준으로 위치를 생각해야 한다. a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 위 배열은 다음과 같은 구조를 가진다.[[1 2 3] # 0번째 행 [4 5 6] # 1번째 행 [7 8 9]] # 2번째 행 행과 열의 인덱스를 함께 보면 다음과 같다. 0열 1열 2열0행 1 2 31행 4 5 62행 7 8 9 따라서 numpy 배열에서는 보통 다음과 같은 형태로 원하는 값을 가져올 수 있다.a[행, 열] a[0]은 0번째..

STUDY/ML DL 2026.05.08

numpy : 배열 연산, 사칙연산, 원소별 곱, 행렬곱

numpy 배열의 연산NumPy 배열은 파이썬 리스트와 비슷해 보이지만, 연산 방식이 완전히 다르다.파이썬 리스트는 데이터를 단순히 저장하는 용도에 가깝지만, NumPy 배열은 수학 연산을 효율적으로 수행하도록 설계되어 있다.특히 NumPy 배열끼리는 원소(element) 단위 연산이 가능하다는 점이 가장 중요하다. 예제를 보자.a = np.array([1, 2, 3])b = np.array([4, 5, 6])c = a + bprint(c) 출력 결과는 다음과 같다.[5 7 9] 파이썬 리스트에서 +는 두 리스트를 이어붙이는 역할을 한다.a = [1, 2, 3]b = [4, 5, 6]print(a + b) 위 코드는 `[1, 2, 3, 4, 5, 6]`처럼 리스트를 연결한다. 하지만 numpy 배열에서..

STUDY/ML DL 2026.05.08

numpy : ndarray, random, randn, rand, shape, dim, size, zeros, ones, arange, linspace

python 에 이어 numpy를 짚어보고자 한다.파이썬과 넘파이는 굉장히 유사하기도 하고, 특정 부분에서 상호보완이 가능한 기특한 녀석이다.특히 딥러닝을 할 때에는 numpy가 반드시 필요하다. ndarray아래와 같은 코드를 수행하면 어떻게 될까?import numpy as npa = np.array([1, 2, 3])print(a) 당연히 `[1,2,3]` 이 되겠다. `np.array()`는 파이썬 리스트를 numpy 배열로 변환하는 함수이다. 여기서 `[1, 2, 3]`은 원래 파이썬 리스트이고, `np.array([1, 2, 3])`을 사용하면 numpy의 배열 객체인 `ndarray`가 된다.이는 가장 기본이 되는 배열 생성 방법으로, 수치 계산에 최적화 되어 있어서 여러 숫자에 대한 연산..

STUDY/ML DL 2026.05.08

SGD와 mini-batch SGD, Momentum과 RMSProp 기반 Adam

Gradient Descent 의 문제1.너무 신중하게 방향을 선택한다.- 모든 데이터의 방향을 전부 고려해서 loss 값을 편미분하여 gradient를 구하기 때문이다.- 데이터가 100만 개라면 100만 번 해줘야 한다...이는 연산이 너무 많아져 gradient의 한 step을 update하려면 너무 오랜 시간이 걸린다. 2. Local Mininum에 빠진다.- alpha를 잘 잡았다면 가장 가까운 로컬 미니멈에 가기에 global minimum에 못갈 수 있다.첫사랑과 결혼할 수 있지만 그게 바로 최고의 선택일까? (이 예시는 혁펜하임의 예시이므로 나와는 전~혀 상관없다) ㅋㅋㅋ여러 개의 케이스가 있을 때 더 나은 솔루션으로 갈 수 있는 경우가 존재한다. Stochastic Gradient D..

STUDY/ML DL 2026.05.08