[Machine Learning] NumPy: AI/ML을 위한 핵심 라이브러리

Date:     Updated:

카테고리:

태그:

🎯 NumPy: AI/ML의 기초

NumPy(Numerical Python)는 파이썬의 핵심 과학 컴퓨팅 라이브러리로, AI와 머신러닝 분야에서 필수적으로 사용되는 도구 (근데 Pytorch나 Tensorflow를 사용하게 되면 거의 사용하지 않는 듯하다. 그래서 이 포스트는 그냥 참고용으로 남겨둔다.)

1. NumPy의 역할

AI/ML에서의 중요성

  • 고성능 수치 계산을 위한 기반 제공
  • 효율적인 다차원 배열(텐서) 처리
  • 선형 대수학 연산의 최적화된 구현
  • 하드웨어 가속(Intel MKL 등)을 통한 성능 향상

실제 사용 사례

  1. 신경망 구현
    • 행렬 연산을 통한 가중치 계산
    • 활성화 함수 적용
    • 역전파 알고리즘 구현
  2. 데이터 전처리
    • 특성 스케일링
    • 차원 축소
    • 데이터 정규화

2. NumPy의 핵심 기능

다차원 배열(ndarray)

import numpy as np

# 1차원 배열
arr1d = np.array([1, 2, 3, 4, 5])

# 2차원 배열 (행렬)
arr2d = np.array([[1, 2, 3],
                  [4, 5, 6]])

# 3차원 배열 (텐서)
arr3d = np.array([[[1, 2], [3, 4]],
                  [[5, 6], [7, 8]]])

행렬 연산

# 행렬 곱
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = np.dot(A, B)  # 또는 A @ B

# 전치 행렬
D = A.T

# 역행렬
E = np.linalg.inv(A)

3. AI/ML 응용 예제

간단한 신경망 구현

def simple_neural_network(input_data, weights, bias):
    # 선형 결합
    z = np.dot(input_data, weights) + bias
    
    # 활성화 함수 (시그모이드)
    def sigmoid(x):
        return 1 / (1 + np.exp(-x))
    
    # 출력
    return sigmoid(z)

# 예제 데이터
X = np.array([[0, 0, 1],
              [0, 1, 1],
              [1, 0, 1],
              [1, 1, 1]])

weights = np.random.random((3, 1))
bias = np.random.random(1)

output = simple_neural_network(X, weights, bias)

데이터 전처리 예제

# 특성 스케일링 (Min-Max 정규화)
def min_max_scaling(X):
    return (X - X.min()) / (X.max() - X.min())

# 표준화 (Z-score 정규화)
def standardization(X):
    return (X - X.mean()) / X.std()

# 예제 데이터
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

scaled_data = min_max_scaling(data)
standardized_data = standardization(data)

4. 성능 최적화

Intel MKL 활용

  • NumPy는 Intel MKL과 연동되어 최적화된 성능 제공
  • 행렬 연산, FFT 등의 계산이 하드웨어 수준에서 가속됨
  • 대규모 데이터셋 처리 시 큰 성능 차이 발생
# 대규모 행렬 연산 예제
large_matrix1 = np.random.random((1000, 1000))
large_matrix2 = np.random.random((1000, 1000))

# MKL 최적화된 행렬 곱
result = np.dot(large_matrix1, large_matrix2)

5. 실전 팁

메모리 효율성

  • 적절한 데이터 타입 선택
    # float64 대신 float32 사용
    arr = np.array([1, 2, 3], dtype=np.float32)
    
  • 뷰(View) 활용
    # 복사 대신 뷰 사용
    arr_view = arr[:]  # 메모리 효율적
    arr_copy = arr.copy()  # 새로운 메모리 할당
    

벡터화 연산

  • 루프 대신 벡터화된 연산 사용
    # Bad
    for i in range(len(arr)):
        arr[i] = arr[i] * 2
      
    # Good
    arr = arr * 2  # 벡터화된 연산
    

🎯 결론

NumPy는 AI/ML 분야에서 필수적인 도구이며, 효율적인 수치 계산과 데이터 처리를 가능하게 해준다. 고수준 프레임워크들의 기반이 되는 이 라이브러리를 잘 이해하고 활용하는 것이 중요하다.

💡 Tip: NumPy를 효과적으로 사용하기 위해서는 선형 대수학의 기본 개념을 이해하고 있어야 한다.

Machine Learning 카테고리 내 다른 글 보러가기