본문 바로가기
  • think together
AI

MLX #1 linear regression test 해보기

by hwamgai 2026. 6. 9.

MLX란?

🗣️ mlx는 애플(맥)환경에 맞게 더 빠르게 연산해주는 가속기라고 생각하면 편해요
그리고 vllm-mlx는 mlx용으로 만든 ai자원관리 해주는애 이고요

mlx-community/Qwen3.5-9B-OptiQ-4bit
mlx-community/Qwen3.5-4B-OptiQ-4bit
맥에서 쓰는 로컬모델은 Q4로 양자화 해서 돌리는게 좋은데, qwen시리즈가 다른모델 대비 무손실이라 훨씬 좋아요

 

 

 

 

https://ml-explore.github.io/mlx/build/html/examples/linear_regression.html

 

Linear Regression — MLX 0.31.2 documentation

Linear Regression Let’s implement a basic linear regression model as a starting point to learn MLX. First import the core package and setup some problem metadata: import mlx.core as mx num_features = 100 num_examples = 1_000 num_iters = 10_000 # iteratio

ml-explore.github.io

 

 

 

가상환경 설치 후 진행

 

import mlx.core as mx

#1. 문제 메타데이터 세팅
num_features = 100
num_examples = 1_000
num_iters = 10_000 #iterations(반복횟수) of SGD
lr = 0.01 #learing rate for SGD

#2. 가상 데이터셋생성
#true parameters (실제 정답 파라미터 벡터)
w_star = mx.random.normal((num_features,))

#input examples (입력 데이터) (design matrix)
"""
‼️ 1개의 데이터가 100개의 feature를 가지고 있고, 총 1000개의 데이터를 가지고 있다.
아래 X는 이걸 1000번 반복하는게 아니라, 행렬 100*1000으로 만들어서 한 번에 학습하도록 만들었다.
"""
X = mx.random.normal((num_examples, num_features))

#Noisy labels (현실적인 데이터를 흉내내기 위한 가우시안 노이즈 추가한 정답 라벨)
eps = 1e-2 * mx.random.normal((num_examples,))
y = X @ w_star + eps #정답라벨y 생성 : (행렬X에 가중치 w*)에 노이즈를 곱한 값

#3. 손실함수(MSE) 및 그래디언트 함수 정의
def loss_fn(w):
    return 0.5 * mx.mean(mx.square(X @ w - y)) #손실함수
    
grad_fn = mx.grad(loss_fn) # 그레디언트: 손실함수 w에 대해 자동으로 편미분하는 함수 grad

#4. 최적화 시작 (w를 랜덤하게 초기화후 SGD 반복)
w = 1e-2 * mx.random.normal((num_features,))
print("학습을 시작합니다....")

for i in range(num_iters):
    grad = grad_fn(w) #현재 기울기 계산
    w = w - lr * grad #가중치 업데이트 - 경사하강법
    mx.eval(w) #MLX의 지연평가 (lazy evaluation)를 실행하는 핵심
    
    
#5. 결과 확인
loss = loss_fn(w)
error_norm = mx.sum(mx.square(w - w_star)).item() ** 0.5

print("-" * 40)
print(f"최종 loss: {loss.item():.5f}")
print(f"정답 : {w_star}")
print(f"예측 : {w}")
print(f"정답과의 오차 (|w- w*|): {error_norm:.5f}")
print("-" * 40)
print("성공적으로 학습이 완료되었습니다.")
#실행 화면

학습을 시작합니다....
----------------------------------------
최종 loss: 0.00004
정답 : array([-0.0342355, -0.637641, -0.0794097, ..., -0.225655, 0.329344, 1.63054], dtype=float32)
예측 : array([-0.0341433, -0.63705, -0.0791549, ..., -0.225897, 0.330027, 1.62989], dtype=float32)
정답과의 오차 (|w- w*|): 0.00355
----------------------------------------

 

 

시각화