1. 정의

 

 

- k = 예측 시 참고할 이웃의 수! 

- 모든 기계 학습 알고리즘 중 가장 간단하고 이해하기 쉬운 분류 알고리즘

- 예측할 데이터가 주어졌을 때, 가장 가까운 k개의 이웃을 찾아 그 다수의 클래스에 따라 분류하는 방식

 


2. 특징

- 학습이 필요없다 = 모델 훈련이 필요없다

데이터를 저장해두고 예측 시 계산만 수행한다

 

- 실행 속도가 느릴 수 있다

새로운 데이터가 들어올 때 마다 모든 기존 데이터와 거리 계산이 필요하다

 

- 입력 형식이 반드시 2차원이여야 한다 

x_new = [[3, 4, 5, 2]]  # 2차원
x_new = [3, 4, 5, 2]   #오류 발생

 


3. 작동 원리

 

거리 측정 → 가까운 k개의 이웃 찾기 → 다수결로 분류

 


4. 장점과 단점

4.1. 장점

1. 이해와 구현이 매우 간단하다

2. 학습이 필요없다

 

4.2. 단점

1. 모든 데이터를 기억해야한다 (예측 시 전체 학습 데이터를 다 확인해야 하므로)

2. 계산시간이 많이 든다 

3. k 값에 따라 과잉적합(k가 너무 작으면 노이즈에 민감해져), 과소적합(k가 너무 크면 일반적이 되어)의 위험이 있다

반응형

'CS > AI' 카테고리의 다른 글

선형 회귀(Linear Regression)  (0) 2025.06.08
머신 러닝  (0) 2025.06.07
Convolutional Neural Network : CNN  (0) 2025.06.02

 

 

지도학습에는 회귀와 분류가 있다

 

1. 회귀의 개념

 

- 입력과 출력이 모두 실수형일 때, 입력 x에 따라 출력 y를 예측하는 f(x)를 찾는 것

 


2. 선형 회귀

2.1. 필요한 이유

현실에서 숫자값을 예측해야 할 일이 많다

1. 키로 몸무게 예측

2. 공부 시간으로 시험 점수 예측

 

이때 어떤 패턴(관계)를 찾기위해 

그 관계를 하나의 직선으로 표현하려함

 

2.2. 정의 

입력 데이터를 가장 잘 설명하는 직선의 기울기와 절편값을 찾는 것 

 

식 : f(x) = Wx + b

W는 기울기 = 가중치

b는 절편 = 바이어스

 

2.3. 종류

단순 선형 회귀

- 입력 x가 하나

- f(x) - wx + b

- w, b는 정확한 예측을 생성하기 위해 알고리즘이 학습하려고 시도하는 매개변수

- x, y 는 학습 데이터, f(x)는 예측

다중 선형 회귀

- 입력 x가 여러개 (면적, 층수, 방 수)

- f(x, y, z) = w0 + w1x + w2y + w3z

- w0, w2, w3 이 계수 또는 가중치며 모델이 학습하려고 하는 매개변수

 


3. 손실함수 

3.1. 정의

- 선형 회귀의 목표는 입력 x가 주어졌을 때 출력 y를 최대한 정확히 예측하는 것이다 

- 손실함수는 예측값과 실제 값 사이의 오차를 계산하여 정확도를 높이는 역할을 한다

 

3.2. MSE(평균 제곱 오차)

- Mean Squared Error

- 입력값에 대해 실제값에 최대한 가까운 예측값을 만들기 위해서 필요하다

MSE = (1/n) * Σ (yᵢ - ŷᵢ)²

 

모든 데이터에 대해 

(실제값 - 예측값)의 차이를 제곱한 후 다 더한 후 갯수로 나눈다

 

 

 

예를 들어 공부 시간 기준으로 시험 점수를 예측하는 모델을 만들었다고 하면

학생 실제 점수 (y) 예측 점수 (ŷ)
A 80 75
B 90 85
C 70 72
D 60 65

 

 

1. 오차 계산

 

실제값 - 예측값

학생 실제 점수( y) 예측 점수 (ŷ) 오차 (y - ŷ)
A 80 75 5
B 90 85 5
C 70 72 -2
D 60 65 -5

 

 

2. 오차 제곱

25, 25, 4, 25

 

3. 오차 제곱의 평균 내기 = MSE 계산

MSE = (25 + 25 + 4 + 25) / 4
= 79 / 4
= 19.75

 


4. 손실 함수 최적화 방법 

4.1. 최소제곱법 : 분석적방법

 

- 수학공식으로 W와 b를 한번에 계산한다

- 아주 빠르고 정확하지만 단순한 선형 회귀에만 사용가능하다 

때문에 대부분은 경사 하강법을 사용한다 

 

4.2. 경사하강법 : 수치적방법

 

- MSE를 줄이는 방향으로 W와 b를 조금씩 조정하면서 반복한다

- 언덕에서 아래로 굴러 내려가듯 기울기를 따라 손실이 낮은 방향으로 이동한다 

W = W - learning_rate * dW
b = b - learning_rate * db

 

학습률(learning_rate)

- 경사 하강법에서 핵심적 개념

- 한 번의 학습에서 W(기울기)와 b(절편)를 얼마나 많이 바꿀지 결정하는 값

- 너무 크거나 작으면 안되기 때문에 처음에는 0.01, 0.001 같은 작은 수로 시작한다


5. 과잉 적합과 과소 적합

5.1. 과잉 적합

- 학습하는 데이터에서는 성능이 뛰어나지만, 새로운 데이터(일반화된 상황)에서는 성능이 잘 나오지 않는 모델을 생성하는 것

- 훈련 데이터에만 너무 딱 맞춘 모델

- 원인 : 너무 복잡한 모델 구조, 훈련 데이터가 너무 적을 때, 정규화를 하지 않았을 때 

 

5.2. 과소 적합

- 학습 데이터에서도 성능이 좋지 않은 경우

- 원인 : 너무 단순한 모델, 학습부족, 너무 작은 모델 파라미터 수

구분  과잉 적합  과소 적합
학습 데이터 성능 매우 좋음 나쁨
테스트 데이터 성능 나쁨 (일반화 안 됨) 나쁨 (애초에 학습도 안 됨)
원인 너무 복잡한 모델, 훈련 데이터 과적합 등 너무 단순한 모델, 학습 부족
해결 방법 모델 단순화, 데이터 더 확보, 정규화 적용 등 모델 복잡도 증가, 더 오래 학습
반응형

'CS > AI' 카테고리의 다른 글

kNN(k-Nearest Neighbor) 알고리즘  (0) 2025.06.09
머신 러닝  (0) 2025.06.07
Convolutional Neural Network : CNN  (0) 2025.06.02

1. 정의

데이터를 기반으로 모델을 학습하여 예측이나 분류 등의 작업을 수행하게 하는 기술


2. 기존 프로그래밍과의 차이 

 

전통적 프로그래밍 : 규칙을 명시적으로 코딩한다

머신러닝 : 데이터를 제공하여 스스로 규칙을 학습한다

 


3. 세가지 종류

3.1. 지도학습

정답이 있는 문제 풀기

입력 : 문제 (X)

출력 : 정답 (Y)

 

예시

1. 아파트 면적(X)을 보고 가격(Y)을 예측

2. 이메일 내용을 보고 스팸인지 아닌지 분류

 

종류

1. 회귀 : 숫자 예측 

2. 분류 : 카테고리 분류

 

3.2. 비지도 학습

정답없이 숨은 패턴 찾기

 

예시 

1. 쇼핑몰에서 사람들의 구매 데이터를 보고, 비슷한 취향의 고객그룹을 찾기

2. 학생들을 시험 점수로 묶어 상위/중위/하위 자동 분류

 

3.3. 강화 학습

시도 - 결과 - 보상 - 학습 반복

컴퓨터가 게임처럼 반복하며 시행착오를 통해 점점 잘하게 되는 것 

 

예시

1. 알파고 바둑

2. 로봇이 벽에 부딪히면 -1점, 목적지에 도달하면 +10점 → 점점 더 잘 움직이게 됨

 


4. 머신러닝 구성 요소

특징(Features) : 입력 데이터의 속성

레이블(Label) : 정답

샘플(Sample) : 입력 데이터 1개 단위 


5. 머신러닝 과정 요약 

1. 데이터 수집
2. 데이터 분할 : 학습용 (train) / 테스트용 (test) – 보통 80:20 또는 70:30
3. 모델 선택 : 선형 모델, SVM, 신경망 등
4. 학습 (Training) : 모델을 데이터에 적합하게 학습
5. 평가 (Evaluation) : 테스트 데이터를 이용하여 성능 확인
6. 예측 (Prediction) : 실제 사용 상황에서 입력에 대한 출력 예측

 


6. 머신 러닝 평가 지표

정확도(Accuracy) : 전체 예측 중 맞춘 비율

 

혼동 행렬(Confusion Matrix)
 - TP (True Positive): 정답을 정답으로 맞춤

 - TN (True Negative): 오답을 오답으로 맞춤

 - FP (False Positive): 오답을 정답으로 예측

 - FN (False Negative): 정답을 오답으로 예측

 


7. 주요 알고리즘

- kNN (k-최근접 이웃)
- SVM (서포트 벡터 머신)
- 신경망 (Neural Network)
- 의사결정트리 (Decision Tree)

 

 

반응형

'CS > AI' 카테고리의 다른 글

kNN(k-Nearest Neighbor) 알고리즘  (0) 2025.06.09
선형 회귀(Linear Regression)  (0) 2025.06.08
Convolutional Neural Network : CNN  (0) 2025.06.02

 

1. 정의

큰 문제를 여러개의 작은 문제로 나누어서 작은 문제를 한 번만 풀고 그 결과를 저장해두는 방식

즉, 같은 문제를 여러번 반복하지 않고 한 번 푼건 기억해서 재활용하는 방식


2. 쓰는 곳

최적화 문제 (가장 큰 값, 최소비용 찾을 때)

문제를 작게 쪼갤 수 있고 중복되는 계산이 자주 일어날 때 효과적이다


3. 핵심 개념

하위 문제 : 큰 문제를 나눈 작은 문제

테이블 또는 Memoization : 계산한 결과를 저장해두는 공간 

Bottom-up 방식 : 작은 문제부터 차례대로 해결해 가는 방식


4. 설계 절차 4단계 

1. 해결 방법의 구조를 파악한다

문제를 작은 문제로 나눌 수 있는지

 

3. 재귀적으로 정의한다

예를 들어 f(n) = f(n-1) + f(n-2) 처럼 큰 문제를 이전문제의 해로 표현할 수 있어야 한다

 

4. 반복문으로 계산한다

작은 문제부터 순서대로 계산해서 저장한다

 

5. 필요하면 실제 해답을 구성한다 

최댓값만 구하는 게 아니라 어떤 선택을 했는지도 알기 위해

 

예를 들면 피보나치 수열이 있다 

F(n) = F(n-1) + F(n-2) 

일반 재귀방식 시 중복 계산이 많아서 느리지만

DP방식 시 순서대로 F(1), F(2)...계산해서 저장하면 훨씬 빠르다 

 


5. DP를 사용해서 이항계수를 효율적으로 구하기

 

5.1. 이항계수?

n개중에서 k개를 고르는 경우의 수 

 

공식으로는 

C(n, k) = n! / (k!(n-k)!) 

 

하지만 팩토리얼 계산이 느릴 수 있으니 재귀적으로 정의된 식을 활용해서 동적으로 계산한다 

 

C(n, k) = C(n-1, k-1) + C(n-1, k) 
(단, C(n, 0) = C(n, n) = 1)

5.2. python 코드

 

입력: 음이 아닌 정수 쌍 
출력: 이항계수 의 값

binomialCoef(n, k):
    C = [[0 for x in range(k+1)] for x in range(n + 1)]
    for i in range(n + 1): 
        for j in range(min(i, k) + 1): 
            if j == 0 or j == i: 
                 C[i][j] = 1
            else: 
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j] 
    return C[n][k]

 

 

1. 중복 계산을 피하기 위해 표에 저장

2. 작은 문제부터 차례대로 계산해서 올라간다 (bottom-up)

반응형

 

1. 정의

매 순간 최선처럼 보이는 선택을 하는 방식

즉, 현재 단계에서 가장 좋아보이는 선택을 반복해서 전체 해답을 만들어가는 방식

 

하지만 각 단계에서의 최선 선택이 전체적으로 최선이라는 보장은 없기 때문에 항상 정답을 보장하는 것은 아니고 적절한 조건을 만족할 때만 올바른 해를 준다


2. 핵심 4가지 함수

1. 타당성 함수 : 지금까지 고른 후보들이 문제 조건을 만족하는지를 확인하는 함수

2. 선택 함수 : 아직 사용하지 않은 후보들 중에서 가장 좋아보이는 것을 선택하는 함수

3. 해답 점검 함수 : 지금까지 고른 것들이 완전한 해답인지 검사하는 함수

4. 목적 함수 : 지금 선택한 해가 얼마나 좋은지 점수(가치)를 매기는 함수 


3. 절차

1. S = ∅ (아무것도 선택하지 않은 상태로 시작)

2. 가장 좋아보이는 후보 하나를 선택한다

3. 그걸 선택해도 조건을 만족하는지 확인한다

4. 조건을 만족하면 해당 집합에 추가한다

5. 현재까지 고른 것들이 문제를 해결했는 지 확인한다

6. 2-5까지의 과정을 문제가 해결될 때 까지 반복한다


4. 예시

4.1. 거스름돈 문제

동전 종류가 500, 100, 50, 10원이 있을 때, 760원을 가장 적은 수의 동전으로 거슬러 주는 문제

→ 항상 가장 큰 동전부터 선택

 

4.2. 최소 신장 트리 (Minimum Spanning Tree, MST)

항상 가장 짧은 간선을 선택해 나가면서 최소 트리를 만든다 

반응형

 

1. 무작위 알고리즘 (Randomized Algorithm)

 

1.1. 정의

 

알고리즘 실행 시 일부 결정이 무작위(난수)를 기반으로 진행 과정을 결정하는 알고리즘

 

1.2. 특징

- 입력과는 별개로 무작위(난수)를 사용하여 처리경로를 결정한다

- 동일한 입력을 두 번 실행했을 때 결과가 다를 수 있다 

- 확률 변수의 기댓값을 통해 성능을 판단한다 

 

*확률 변수의 기댓값 : 많은 시행을 반복했을때 평균적으로 기대할 수 있는 값 

 


2. Monte Carlo 알고리즘

2.1. 정의

무작위성을 활용해 계산을 끝내고, 정확한 답일 확률이 높으면 결과를 그대로 사용한다 

2.2. 특징

 - 정확도는 반복 횟수로 보장할 수 있다

 - 빠르게 답을 찾고 싶을 때 사용한다

2.3. π(파이)를 계산하기

 

  • 반지름 1짜리 원이 하나 있다고 가정한다
  • 그 원이 딱 맞게 들어가는 정사각형도 하나 있다고 가정한다
  • 정사각형 안에 무작위로 점을 마구마구 찍는다
  • 그중에서 원 안에 들어간 점이 전체에서 몇 퍼센트인지 계산한다
  • 그 비율을 이용해서 π를 추정한다
입력: 무작위로 생성하는 좌표의 개수 n
출력: 원주율 π의 근사 값

# 부채꼴 내의 좌표의 개수
a = 0

# 생성할 전체 좌표의 개수
n = int(input("생성할 전체 좌표의 개수: "))

# 전체 좌표의 수 만큼 반복한다.
for i in range(0, n):
    # [0, 2]내의 x, y를 무작위 생성한다.
    x = random() * 2
    y = random() * 2
    # 부채꼴내의 좌표의 개수를 증가한다.
    if (x * x + y * y) <= 4.0:
        a += 1

# 원주율 pi를 계산한다.
pi = float(a / n) * 4
print(pi)

 

 

 


3. Las Vegas 알고리즘

3.1. 정의

결과의 정확성은 항상 보장되지만, 실행 시간은 랜덤인 알고리즘

3.2. 특징

 - 정확성 : 항상 정확한 결과를 반홚나다

 - 실행 시간 : 무작위성에 따라 변동이 있다

 


4. Monte Carlo / Las Vegas 알고리즘 비교

구분 Monte Carlo  Las Vegas
정확도 틀릴 수 있음 절대 틀리지 않음
속도 빠름 (정해진 시간) 느릴 수 있음 (랜덤)
사용 목적 근사값 추정 정답 보장하면서 무작위 전략 쓰는 경우
예시 파이 근사, 확률 계산 퀵소트(랜덤 피벗), 3-SAT 해 찾기

 

반응형

 

1. 무차별 검색

1.1. 정의

- 가능한 모든 해(후보)를 만들어보고 그 중 가장 적합한 해를 선택하는 방식

1.2. 특징

- 가장 직관적이고 단순하다

- 완전 탐색이라고도 하며 정답을 반드시 찾을 수 있다

- 하지만 경우의 수가 많아지면 시간복잡도가 급격히 증가한다

 


2. 알고리즘 구조

2.1. 구조 (의사코드)

solve(parameters)
{
    generate all possible solutions;
    ans = select most feasible solution;
    return ans;
}

 

generate all possible solutions : 가능한 모든 경우를 만든다

select most feasible solution : 가장 적합한(문제를 만족하는) 해를 선택

return : 그 해를 반환

 

 

2.2. 구조 (python)

from itertools import permutations

def is_valid(board):
    n = len(board)
    for i in range(n):
        for j in range(i + 1, n):
            if abs(board[i] - board[j]) == abs(i - j):  # 대각선 충돌
                return False
    return True

def solve_n_queens_bruteforce(n):
    count = 0
    for perm in permutations(range(n)):
        if is_valid(perm):
            count += 1
    return count

print(solve_n_queens_bruteforce(8))  # 8-Queen 정답 개수: 92

 

permutations를 이용해 모든 경우의 수를 만들어서, is_valid()로 유효한지 검사한다

시간 복잡도 : O(n!)

 


 

3. 백트래킹 (Backtracking)

3.1. 정의 

해를 찾는 과정에서 가능성이 없는 경로를 조기에 차단하고 들어가서 다른 경로를 시도하는 방식

 


3.2. 구성요소

1. 상태 공간 트리

 - 가능한 모든 선택(해 후보)을 트리 구조로 나타낸다

 - 루트부터 리프까지 내려가며 해를 구성한다

 

2. 유망 함수

 - 현재 선택이 앞으로 정답이 될 가능성이 있는지 판단한다

 - 가능성이 없으면 해당 가지를 더이상 탐색하지 않는다

 

3. 되돌아가기 (Backtracking)

 -  유망하지 않은 경로를 만나면 한 단계 이전으로 되돌아 간다

 - 그 위치에서 다음 가능한 선택지를 탐색한다

 


3.3. 의사코드

expand(node v):
    node u
    for (each child u of v):
        if (promising(u)):
            if (there is a solution at u):
                write the solution
            else:
                expand(u)

 

1. expand(node v):
v는 현재 탐색 중인 노드 (예: N-Queen에서 현재까지 여왕을 놓은 상태)

 

2. node u
자식 노드를 표현할 변수 u 선언

 

3. for (each child u of v):
현재 노드 v의 모든 자식 노드(u)를 순회하면서
자식 하나하나를 후보 상태로 간주하고 처리

 

4. if (promising(u)):

현재 자식 상태 u가 가능성 있는(유망한) 상태인지 검사

여기서 가능성이 없다고 판단되면 더 이상 안 내려감

 

5.  if (there is a solution at u):
       write the solution

 

u가 완전한 해(최종 상태)라면, 즉 더 이상 놓을 게 없고 조건을 만족한다면,
이 상태를 정답으로 출력

 

6. else: 

     expand(u)

아직 해가 아니지만 유망하다면, 재귀적으로 다음 단계로 넘어간다 

 


3.4. N-Queen 문제

n x n 체스판에 n개의 여왕을 놓는 문제

단, 서로 공격하지 못하게 놓아야 한다

 

*참고

체스에서 여왕은 말 중 가장 강력하므로, 한 번에 가로, 세로, 대각선으로 원하는 만큼 이동할 수 있다

그래서 여왕 두개가 같은 행, 열, 대각선에 함께있으면 안된다

 

과정

1. 한 행에 하나씩 여왕을 놓는다

2. 각 행마다 어느 열에 놓을지 결정한다

3. 가능한 열을 다 시도하면서 다른 여왕들과 충돌하는지 검사한다

4. 충돌하면 되돌아가서 다른 열 시도 (백트래킹)

5. 충돌하지 않으면 다음행으로 넘어간다

6. 마지막 행까지 다 놓으면 완료

 

 

python 코드 

입력 

 - Q : 여왕의 위치를 기록할 리스트

 - K : 현재 배치할 여왕의 행 번호

 - n : 체스판 크기이자 여왕 개수

 

출력

 - 공격받지 않게 여왕을 놓은 모든 방법

 

nQueens(Q, k, n):
    if k == n:
        print(Q)
        return
    i = 0
    while i < n:
        Q[k] = i
        if Promising(Q, k):
            nQueens(Q, k + 1, n)
        i += 1

# 유망함수
Promising(Q, k):
    i = 0
    while i < k:
        if Q[k] == Q[i] or abs(Q[i] - Q[k]) == (k - i):
            return False
    i += 1
return True

 

반응형

 

 

1. 정의

- 2차원 데이터에서 특징을 자동으로 추출하고 분류하는 신경망

- 네오코그니트론(Neocognitron)신경망을 바탕으로 만들어짐 

 

네오코그니트론(Neocognitron)

- 일본의 후쿠시마 쿠니히코가 만든 신경망 구조로 고양이의 시각세포 연구(후벨과 위젤의 연구)를 보고 아이디어를 얻었다

- 사람이나 동물이 시각적으로 사물을 인식하는 방식을 본떠서 만든 것

- 구성

  - S셀 (단순 세포) : 입력에서 특징(선, 점 등)을 뽑아내는 역할 = 컨볼루션

  - C셀 (복합 세포) : 여러개의 S셀을 보고 좀 더 강한 특징을 요약한다 = 폴링


2. 구조

 

입력 → [컨볼루션 → ReLU → 풀링] × 반복 → Flatten → Fully Connected → Softmax 출력

 

- 입력층 : 이미지를 받아들임
- 컨볼루션층 : 이미지에서 특징을 뽑음
- ReLU : 음수 제거, 비선형성 추가
- 풀링층 : 크기를 줄여 요약함
(위 과정을 여러 번 반복)


- 평탄화(Flatten) : 1차원 벡터로 펼침
- 완전연결층(Dense) : 특징을 바탕으로 판단
- 출력층(Softmax) : 결과를 확률로 출력

 


 

3. 특징

3.1. 연결구조

 

각 뉴런이 입력 전체(초록)가 아니라 일부 영역(노랑)만 본다

사람이 한 번에 전체를 다 보는게 아니라 부분만 보고 특징을 추출하는 방식

과적합(모델이 훈련 데이터에 지나치게 맞춰져서 새로운 데이터에는 성능이 떨어지는 현상) 위험이 낮아진다 

 

 

3.2. 용도와 중요성

다양한 이미지 관련 작업에 사용된다 

 

 

용도 설명

용도 설명
이미지 분류 어떤 종류의 이미지인지 판단 (예: 개, 고양이, 자동차 등)
객체 탐지(Object Detection) 이미지 안에서 물체의 위치와 종류를 찾아냄
얼굴 인식 사람 얼굴을 인식하고 구별함
숫자 인식 필기 숫자나 자동차 번호판 인식 등
이미지 설명 생성 이미지 내용을 이해하고 설명하는 데도 활용 가능

 

2차원 구조를 가진 데이터에 잘 맞는 구조라 적은 계산으로도 중요한 시각적 특징(엣지, 모양)을 효과적으로 추출할 수 있다 

 


4. 컨벌루션 연산

 

주변 화솟값(픽셀)에 필터(마스크)의 가중치를 곱해서 더한 값을 새로운 픽셀값으로 만드는 연산이다

이미지에서 중요한 특징을 추출하기 위한 계산방식 = 즉, 강조하기 위해 

 

 

 

- 입력 영상 : 원래의 이미지 픽셀 값 

- 컨볼루션 마스크 : 각 위치에 a, b, c... 같은 가중치 값이 있는데 이 필터를 이미지 위에 겹쳐놓고 대응되는 입력영상 픽셀들과 각각 곱한 후 전부 더한다 

- 출력 영상 : 위 계산결과를 순차적으로 완료한 새로운 이미지 

 

 

 

 

 

4.1. 보폭 (Stride)

필터가 이미지를 따라 얼마만큼 이동하며 연산을 할지를 정하는 값 

보폭이 크면 출력이 작아진다

 

4.2. 패딩 (Padding)

이미지의 가장자리를 처리하기 위해 0을 채워 넣는 것

필터를 가장자리에도 적용하고 싶은데, 필터가 이미지 밖으로 튀어나갈 수 있기 때문에 0을 덧붙여 늘리는 방식을 사용

 

4.3. 커널 (필터)

- 한 장의 입력 이미지에서 다양한 종류의 정보를 추출하기 위해 여러개의 필터(커널)을 동시에 적용한다

- CNN에서는 하나의 컨볼루션 레이어에서 128, 256개 처럼 수십-수백 개의 필터를 동시에 학습한다 

- 각 필터는 서로 다른 특징을 감지하려고 노력한다 

 

 


5. 풀링 (Pooling) = 서브 샘플링

입력 데이터의 크기를 줄이는 작업

 

5.1. 방법

입력 이미지에 여러 개의 필터(커널)를 겹쳐서 슬라이딩하며 연산한다

 

5.2. 종류

 

파일을 일정한 크기로 나누어서 각 영역에서 대표값만 남긴다 

  • MaxPooling : 가장 큰 값만 남김
  • AveragePooling : 평균값만 남김 

 

5.3. 장/단점

장점

- 데이터 크기를 줄이기 때문에 연산 속도가 빨라진다

- 과적합이 방지된다

 

단점

- 자세한 특징이 사라질 수 있다

- 성능이 저하될 수 있다 

 

반응형

'CS > AI' 카테고리의 다른 글

kNN(k-Nearest Neighbor) 알고리즘  (0) 2025.06.09
선형 회귀(Linear Regression)  (0) 2025.06.08
머신 러닝  (0) 2025.06.07

1. 정의

어떤 상태에서 최선을 다했을 때 가능한 최고의 성과 예측치

유망 : 더 좋은 해답을 찾을 가능성이 있어 탐색할 가치가 있는 상태

비유망 : 더 좋은 해답을 기대할 수 없어 그만 탐색해도 되는 상태 

 

2. 목적

1. 유망하지 않은 경로 조기 제거

 - 지금까지 찾은 해보다 더 나쁜 결과가 예상된다면 그 이후의 분기는 볼 필요가 없으니 그 자리에서 탐색을 중단한다

 

2. 탐색시간 단축

 - 쓸모없는 경로를 보지 않기 때문에 전체 탐색 경로 시간을 줄일 수 있다

 - 특히 조합이 많은 문제에서 중요하다

 

 

이 개념은 분기 한정 (Branch and Bound), 백트래킹, A* 알고리즘 등에서 핵심적으로 사용된다 

 

 

반응형

 


 

1. 정의

최단 경로 탐색 알고리즘


2. 평가함수

 

 

 

g(n) : 지금까지 움직인 횟수

h(n) : 앞으로 예상되는 값 (얼마나 가야할지) = 휴리스틱 

f(n) : 그래서 이 경로가 얼마나 유망한지(최단인지) = 적합도

 


 

3. 3x3 퍼즐 

 

3x3 숫자판에 1-8까지의 숫자와 빈칸이 주어진다

숫자판 안의 숫자를 인접한 빈칸으로 옮기는 작업을 반복함으로써

목표 노드가 되도록 숫자의 총 이동 횟수를 최소로 하고자 한다

 

 

 

 

다음과 같은 방법으로 풀이한다

 

 

 

 

 

위키백과 풀이를 참고하면 좀 더 쉽다 

 

 

https://ko.wikipedia.org/wiki/A*_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 


4. 구조

A* 알고리즘의 매우 간략화된 버전

pq.enqueue(start_node, g(start_node) + h(start_node))
while pq is not empty:
    node = pq.dequeue 
    if node == goal_node:
        break
    for next_node in (next_node_begin...next_node_end):
        pq.enqueue(next_node, g(node) + cost + h(next_node)) 
return goal_node_dist

 

 

1. pq.enqueue(start_node, g(start_node) + h(start_node))

 

→  출발 지점을 우선순위 큐에 넣는다

g(start_node)는 지금까지 온 거리 (시작은 0)

h(start_node)는 목적지까지 얼마나 더 가야 할지 예상한 값

 

 

2. while pq is not empty:
    node = pq.dequeue

 

→ 가장 점수가 낮은(즉, 가장 최단) 노드를 꺼낸다

 

 

3. if node == goal_node:
      break

 

→ 만약 node 가 목표 node 와 같으면 끝

 

 

4. for next_node in (next_node_begin...next_node_end):
    pq.enqueue(next_node, g(node) + cost + h(next_node))

 

그게 아니면 지금 노드에서 경우의 수를 전부 확인한다

그리고 각 노드마다 f(n) = pq.dequeue를 계산해서 큐(pq.enqueue)에 넣는다

 

 

5. return goal_node_dist

  goal_node까지 도달한 이후 g(goal_node) 값을 반환 즉, A* 알고리즘으로 구한 최단거리

 

 

반응형

+ Recent posts