Programming/Python

🌱 ν˜„λŒ€ 인곡지λŠ₯ ν•™μŠ΅ 1단계: 기초 μˆ˜ν•™ 및 μ„ ν˜•λŒ€μˆ˜

octo54 2025. 5. 8. 10:31
λ°˜μ‘ν˜•

🌱 ν˜„λŒ€ 인곡지λŠ₯ ν•™μŠ΅ 1단계: 기초 μˆ˜ν•™ 및 μ„ ν˜•λŒ€μˆ˜

πŸ“… ν•™μŠ΅ κΈ°κ°„: 1~3κ°œμ›”

🎯 ν•™μŠ΅ λͺ©ν‘œ: AI μ•Œκ³ λ¦¬μ¦˜μ„ μœ„ν•œ μˆ˜ν•™μ  기초 확보


πŸ“ 1. 기초 μˆ˜ν•™μ˜ ν•„μš”μ„±

인곡지λŠ₯κ³Ό λ¨Έμ‹ λŸ¬λ‹μ„ 닀루기 μœ„ν•΄μ„œλŠ” μˆ˜ν•™μ  κ°œλ…μ΄ ν•„μˆ˜μž…λ‹ˆλ‹€.
특히 λ―ΈλΆ„, μ„ ν˜•λŒ€μˆ˜, ν™•λ₯ κ³Ό ν†΅κ³„λŠ” λ”₯λŸ¬λ‹ λͺ¨λΈκ³Ό μ΅œμ ν™” μ•Œκ³ λ¦¬μ¦˜μ„ μ΄ν•΄ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.
이번 κΈ€μ—μ„œλŠ” 인곡지λŠ₯의 기초 μˆ˜ν•™ κ°œλ…κ³Ό μ‹€μŠ΅μ„ μ€‘μ‹¬μœΌλ‘œ ν•™μŠ΅ν•©λ‹ˆλ‹€.


πŸ“Œ 1-1. λ―ΈλΆ„κ³Ό 적뢄

πŸ”‘ 1) λ―ΈλΆ„μ˜ κ°œλ…κ³Ό ν™œμš©

미뢄은 ν•¨μˆ˜μ˜ λ³€ν™”μœ¨μ„ κ΅¬ν•˜λŠ” μ—°μ‚°μž…λ‹ˆλ‹€.
λ”₯λŸ¬λ‹ λͺ¨λΈμ˜ 손싀 ν•¨μˆ˜ μ΅œμ ν™”μ—μ„œ κ²½μ‚¬ν•˜κ°•λ²•(Gradient Descent)을 톡해 κ°€μ€‘μΉ˜λ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

μ˜ˆμ‹œ:
손싀 ν•¨μˆ˜ L(w)L(w)λ₯Ό λ―ΈλΆ„ν•˜μ—¬ 기울기λ₯Ό κ΅¬ν•¨μœΌλ‘œμ¨ μ΅œμ†Œκ°’μ„ μ°ΎμŠ΅λ‹ˆλ‹€.

dLdw=lim⁑h→0L(w+h)−L(w)h\frac{dL}{dw} = \lim_{h \to 0} \frac{L(w + h) - L(w)}{h}

Python 예제:

import sympy as sp

# λ³€μˆ˜ μ •μ˜
w = sp.symbols('w')
L = w**2 + 3*w + 2

# λ―ΈλΆ„ 계산
dL_dw = sp.diff(L, w)
print(f"λ―ΈλΆ„ κ²°κ³Ό: {dL_dw}")

κ²°κ³Ό:

λ―ΈλΆ„ κ²°κ³Ό: 2*w + 3

πŸ’‘ λ―ΈλΆ„ ν™œμš©:

  1. κ²½μ‚¬ν•˜κ°•λ²•(Gradient Descent): κΈ°μšΈκΈ°κ°€ 음수면 였λ₯Έμͺ½μœΌλ‘œ 이동, μ–‘μˆ˜λ©΄ μ™Όμͺ½μœΌλ‘œ μ΄λ™ν•˜μ—¬ 졜적점 탐색
  2. ν™œμ„±ν™” ν•¨μˆ˜ λ―ΈλΆ„: μ‹ κ²½λ§μ—μ„œ μ—­μ „νŒŒλ₯Ό 톡해 였차λ₯Ό μ΅œμ†Œν™”

πŸ”‘ 2) μ λΆ„μ˜ κ°œλ…κ³Ό ν™œμš©

적뢄은 ν•¨μˆ˜μ˜ λ„“μ΄λ‚˜ λˆ„μ  값을 κ΅¬ν•˜λŠ” μ—°μ‚°μž…λ‹ˆλ‹€.
λͺ¨λΈ ν•™μŠ΅μ—μ„œ **ν™•λ₯  밀도 ν•¨μˆ˜(PDF)**λ₯Ό κ³„μ‚°ν•˜κ±°λ‚˜, λˆ„μ  뢄포 ν•¨μˆ˜λ₯Ό ꡬ할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.

Python 예제:

# 적뢄 계산
integral = sp.integrate(L, w)
print(f"적뢄 κ²°κ³Ό: {integral}")

κ²°κ³Ό:

λ°˜μ‘ν˜•
적뢄 κ²°κ³Ό: w**3/3 + 3*w**2/2 + 2*w

πŸ’‘ 적뢄 ν™œμš©:

  1. ν™•λ₯  뢄포 계산: ν™•λ₯  밀도 ν•¨μˆ˜(PDF)의 λˆ„μ  ν™•λ₯  계산
  2. 신경망 ν™œμ„±ν™” ν•¨μˆ˜μ˜ λˆ„μ κ°’ 계산: μ†Œν”„νŠΈλ§₯슀 ν•¨μˆ˜μ˜ ν™•λ₯  뢄포 κ΅¬ν•˜κΈ°

πŸ“Œ 1-2. μ„ ν˜•λŒ€μˆ˜μ™€ 벑터 μ—°μ‚°

πŸ”‘ 1) 벑터와 ν–‰λ ¬μ˜ κ°œλ…

벑터와 행렬은 데이터λ₯Ό ν‘œν˜„ν•˜λŠ” κΈ°λ³Έ λ‹¨μœ„μž…λ‹ˆλ‹€.

  • 벑터(Vector): 크기와 λ°©ν–₯을 κ°€μ§„ μˆ˜ν•™μ  객체
  • ν–‰λ ¬(Matrix): 2차원 λ°°μ—΄ ν˜•νƒœλ‘œ 데이터λ₯Ό ꡬ쑰화

Python 예제:

import numpy as np

# 벑터와 ν–‰λ ¬ μ •μ˜
v = np.array([2, 4, 6])
A = np.array([[1, 2], [3, 4]])

# 벑터 μ—°μ‚°
print(f"λ²‘ν„°μ˜ 길이: {np.linalg.norm(v)}")
print(f"ν–‰λ ¬μ˜ μ „μΉ˜: \n{A.T}")

πŸ’‘ 벑터와 ν–‰λ ¬ ν™œμš©:

  1. 신경망 κ°€μ€‘μΉ˜ ν‘œν˜„: κ°€μ€‘μΉ˜λ₯Ό ν–‰λ ¬λ‘œ ν‘œν˜„ν•˜μ—¬ μ—°μ‚° κ°„κ²°ν™”
  2. ν–‰λ ¬ κ³±μ…ˆ: λͺ¨λΈ 예츑 κ°’ 계산 및 κ°€μ€‘μΉ˜ μ—…λ°μ΄νŠΈ

πŸ”‘ 2) ν–‰λ ¬ μ—°μ‚°κ³Ό μ—­ν–‰λ ¬

역행렬은 ν–‰λ ¬ μ—°μ‚°μ—μ„œ λ‚˜λˆ—μ…ˆμ— ν•΄λ‹Ήν•˜λ©°, μ„ ν˜• 방정식을 ν•΄κ²°ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€.
역행렬이 μ‘΄μž¬ν•˜λ €λ©΄ ν–‰λ ¬μ˜ **행렬식(determinant)**이 0이 μ•„λ‹ˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

Python 예제:

# μ—­ν–‰λ ¬ κ΅¬ν•˜κΈ°
det_A = np.linalg.det(A)
inv_A = np.linalg.inv(A)

print(f"행렬식: {det_A}")
print(f"μ—­ν–‰λ ¬: \n{inv_A}")

κ²°κ³Ό:

행렬식: -2.0000000000000004
μ—­ν–‰λ ¬:
[[-2.   1. ]
 [ 1.5 -0.5]]

πŸ“Œ 1-3. ν™•λ₯ κ³Ό 톡계

πŸ”‘ 1) ν™•λ₯  이둠의 κΈ°λ³Έ κ°œλ…

  • ν™•λ₯ λ³€μˆ˜: μ‚¬κ±΄μ˜ κ²°κ³Όλ₯Ό 수치둜 ν‘œν˜„ν•œ λ³€μˆ˜
  • κΈ°λŒ“κ°’: ν™•λ₯ λΆ„ν¬μ˜ 쀑심값
  • λΆ„μ‚°: λ°μ΄ν„°μ˜ 흩어짐 정도

Python 예제:

import random

# μ£Όμ‚¬μœ„ λ˜μ§€κΈ°
trials = [random.randint(1, 6) for _ in range(1000)]
mean = np.mean(trials)
variance = np.var(trials)

print(f"κΈ°λŒ“κ°’: {mean}")
print(f"λΆ„μ‚°: {variance}")

πŸ’‘ ν™•λ₯  κ°œλ… ν™œμš©:

  1. μ‹ κ²½λ§μ˜ λΆˆν™•μ‹€μ„± 평가: 예츑 ν™•λ₯  계산
  2. λ² μ΄μ§€μ•ˆ ν•™μŠ΅: 사전 ν™•λ₯ κ³Ό 사후 ν™•λ₯  계산

πŸ”‘ 2) 톡계 뢄석

  • 평균과 쀑앙값: λ°μ΄ν„°μ˜ 쀑심 κ²½ν–₯을 νŒŒμ•…
  • λΆ„μ‚°κ³Ό ν‘œμ€€νŽΈμ°¨: λ°μ΄ν„°μ˜ 변동성 νŒŒμ•…
  • μƒκ΄€κ³„μˆ˜: λ³€μˆ˜ κ°„μ˜ 관계성

Python 예제:

data = np.random.randn(100)
mean = np.mean(data)
std_dev = np.std(data)

print(f"평균: {mean}, ν‘œμ€€νŽΈμ°¨: {std_dev}")

πŸ’» μ‹€μŠ΅ ν”„λ‘œμ νŠΈ: κ²½μ‚¬ν•˜κ°•λ²• κ΅¬ν˜„

λͺ©ν‘œ: 졜적의 직선 κ΅¬ν•˜κΈ° (μ„ ν˜• νšŒκ·€)
μ½”λ“œ:

# 데이터 생성
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

# μ΄ˆκΈ°κ°’
w = 0.0
b = 0.0
learning_rate = 0.01

# κ²½μ‚¬ν•˜κ°•λ²•
for epoch in range(100):
    y_pred = w * x + b
    loss = np.mean((y_pred - y) ** 2)

    # λ―ΈλΆ„
    dw = np.mean(2 * (y_pred - y) * x)
    db = np.mean(2 * (y_pred - y))

    # μ—…λ°μ΄νŠΈ
    w -= learning_rate * dw
    b -= learning_rate * db

print(f"졜적 w: {w}, 졜적 b: {b}")

πŸ“ ν•™μŠ΅ 체크리슀트:

  • λ―ΈλΆ„κ³Ό μ λΆ„μ˜ κΈ°λ³Έ κ°œλ…μ„ μ΄ν•΄ν•˜κ³  ν™œμš©ν•  수 μžˆλ‹€.
  • 벑터와 ν–‰λ ¬ 연산을 자유둭게 μˆ˜ν–‰ν•  수 μžˆλ‹€.
  • ν™•λ₯ κ³Ό ν†΅κ³„μ˜ κΈ°λ³Έ κ°œλ…μ„ μ΄ν•΄ν•˜κ³  계산할 수 μžˆλ‹€.
  • κ²½μ‚¬ν•˜κ°•λ²•μ„ 직접 κ΅¬ν˜„ν•  수 μžˆλ‹€.

λ―ΈλΆ„, 적뢄, μ„ ν˜•λŒ€μˆ˜, ν™•λ₯ κ³Ό 톡계, κ²½μ‚¬ν•˜κ°•λ²•, 벑터 μ—°μ‚°, ν–‰λ ¬ μ—°μ‚°, AI 기초 μˆ˜ν•™, Python μˆ˜ν•™ κ΅¬ν˜„, λ”₯λŸ¬λ‹ 기초