y1w3n's blog

Machine Learning

2025-04-07

機器學習

BY y1w3n


隨手記版本

定義問題->蒐集資料->資料分析->處理資料集->訓練模型->推論和預測

名詞

深度學習入門

一些colab連結

感知器神經網路演算法

神經網路

過程

image

  • a、y : 節點
階躍函數圖形、sigmoid函數圖形
1
2
3
4
5
6
7
8
9
10
11
#階躍函數圖形程式碼
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
return np.array(x > 0)

x = np.arange(-5.0, 5.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # 指定y軸的範圍
plt.show()

image


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 階躍函數圖形+ sigmoid函數圖形程式碼
import numpy as np
import matplotlib.pylab as plt
import seaborn as sns

def step_function(x):
return np.array(x > 0, dtype=int)

def sigmoid(x):
return 1 / (1 + np.exp(-x))

X = np.arange(-5.0, 5.0, 0.1)
y_step_function = step_function(X)
y_sigmoid = sigmoid(X)

plt.figure(figsize=(8, 6))
sns.lineplot(x=X, y=y_step_function, label='step_function')
sns.lineplot(x=X, y=y_sigmoid, label='sigmoid')

plt.ylim(-0.1, 1.1)
plt.legend()
plt.show()

image

ReLU函數圖形
1
2
3
4
5
6
7
8
9
10
#ReLU函數圖形
def relu(x):
return np.maximum(0, x) #maximum: 從輸入中選較大的值輸出

x = np.arange(-5.0, 5.0, 0.1)
print(relu(x))
y=relu(x)
plt.plot(x, y)
plt.ylim(-1, 5) # 指定y軸的範圍
plt.show()
1
2
3
4
5
6
7
#print(relu(x))
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.1 0.2 0.3
0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. 2.1
2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9
4. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9]

image

1
2
3
4
5
6
7
8
9
10
11
12
X = np.array([1.0, 0.5])
W1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
B1 = np.array([0.1, 0.2, 0.3])
print(W1.shape) # (2, 3)
print(X.shape) # (2,)
print(B1.shape) # (3,)
A1 = np.dot(X, W1) + B1 # np.dot : 一次計算出結果
print(A1)
#經過sigmoid激活函數
Z1=sigmoid(A1)
print(Z1)

三層神經網路程式

  • 數據處理
    • 正規化 : 把資料限定到某個範圍內
    • 預處理 : 對神經網路的輸入數據進行某種既定的轉換
    • 數據白化 : 將資料整體的分佈形狀均勻化的方法
  • 神經網路的學習

    損失函數

    參考連結

    梯度

    偏導數跟梯度動畫圖

    簡單解釋一下梯度 梯度可以用比較簡單的方式理解成「多變數函數的斜率」。假設你爬山的時候有一張地圖,上面標出了高度變化的等高線。梯度就像是告訴你在某個位置,哪個方向是上坡最陡、上升最快的方向。

    想像一下你在一個山坡上,你想知道哪個方向爬得最快,梯度就告訴你哪個方向坡最陡,並且告訴你這個方向的陡峭程度。

    在數學上,假設有一個二維的高度函數 f(x,y),梯度是由函數在x和 y 方向上的斜率(即偏導數)組成的向量∇𝑓(𝑥,𝑦),它由兩部分組成:x 方向上的變化率(偏導數)和在y方向上的變化率(偏導數)。公式是:
    image
    ∂f/∂x: 在y固定的情況下f的變化量除以x的變化量就叫做f對於x的偏導數 (這個符號∂念:partial)
    image

    使用偏導數在計算梯度的時候就像是在算每個點的斜率,我們要的就是用梯度找這個範圍的最小值

    導數跟偏導數差別:
    導數單變量函數、單一方向變化
    偏導數看多個方向上的變化

    梯度下降法colab

    神經網路學習完整步驟


    1. mini-batch
      • 從一堆數據中隨機選一批據進行學習,目標是縮小mini-batch損失函數的值
    2. 計算梯度
      • 為了減少mini-batch的損失函數的值,需要求出各個權重參數的梯度。
      • 梯度顯示了在當前 mini-batch 中,損失函數減少最快的方向。
    3. 更新參數
      • 算出梯度後帶入公式更新參數(參數更新是對我當前mini-batch的數據)
    4. 重複以上步驟


    誤差反向傳播法

    計算圖

    鍊式法則

    相關技巧

    參數更新

    image
    image
    image
    image

    ← Back to Home