第三章:線性神經網路

NorthernDeerherd發表於2024-08-16

3.1 線性迴歸

3.1.1 基本元素
訓練資料集/樣本/標籤/特徵

3.1.1.1 線性模型
一個線性模型有權重,偏移量,權重決定特徵對預測值的影響,偏移量則是當特徵為0時說明預測值為多少
3.1.1.2 損失函式
損失函式能夠量化目標的實際值與預測值之間的差距(損失函式以及部分函式前面的二分之一用來簡化形式)
度量整個資料集質量,需要對n個樣本求損失均值
3.1.1.3 解析解
對於這個解析解的轉化,w* = ?(3.18公式)右側的解是矩陣進行轉置變換後得到的。
3.1.1.4 隨機梯度下降
梯度下降用法:計算損失函式關於模型引數的導數。但由於每次更新引數之前需要便利整個資料集,因此通常會在每次需要計算更新時抽取一小批樣本,
叫做小批次隨機梯度下降。
至於每次迭代更新的過程:對3.1.9的公式進行分析即可。要把偏導區分,第i個損失函式l要明確。
η為學習率。
泛化:找到一組引數能在從未見過的資料上實現較低的損失。

3.1.2 向量化加速
向量化程式碼會加速運算,對程式碼要思考最佳化。

3.1.3 正態分佈於平方損失
均方差誤差損失可用於線性迴歸:假設觀測中包含噪聲,且噪聲服從正態分佈。
這裡有一個極大似然估計法,有需要要重新來這裡理解。

3.2 線性迴歸從零開始實現

3.2.1 生成資料集
def synthetic_data(w, b, num_examples): #@save
"""生成y=Xw+b+噪聲"""
X = torch.normal(0, 1, (num_examples, len(w)))
y = torch.matmul(X, w) + b
y += torch.normal(0, 0.01, y.shape)#新增噪聲,防止過擬合,新增隨機性。
return X, y.reshape((-1, 1))#-1表示自動推斷該維度的大小,1表示這裡想要一個列向量。該函式最後返回特徵X與標籤y。

true_w = torch.tensor([2, -3.4])#權重,為2與-3.4
true_b = 4.2 #偏移量 4.2
features, labels = synthetic_data(true_w, true_b, 1000) #特徵,標籤生成

3.2.2 讀取資料集
def data_iter(batch_size, features, labels): #batch_size 每行樣本數量 features 特徵矩陣 labels 標籤向量或矩陣
num_examples = len(features) #資料集中樣本的數量,透過計算特徵矩陣的長度來確定樣本數
indices = list(range(num_examples))#建立列表,索引長度為從0到num_examples-1的長度
random.shuffle(indices)#打亂索引
for i in range(0, num_examples, batch_size):#以batch_size為步長,遍歷整個資料集,i為索引。
batch_indices = torch.tensor(
indices[i: min(i + batch_size, num_examples)])#從第i個索引到第i+batch_size之間的索引子列表,如果超過num_examples,則取最後一個樣本索引即停,並透過torch.tensor轉化為張量
yield features[batch_indices], labels[batch_indices]#yield關鍵字,允許函式每次呼叫時返回一個值,但保留函式的執行狀態,以便下次繼續執行。本段用來生成批次資料。

3.2.3 初始化模型引數

相關文章