機器學習 單層神經網路線性回歸從零實現

2021-09-01 05:48:00 字數 2407 閱讀 5518

單層神經網路有線性回歸和softmax回歸,這篇部落格先討論一下線性回歸問題

y = x*w + b
其中w為權重weight,b為偏差bias

l(w, b) = 1/2 * (y - ^y)^2

(w*, b*) = argmin(l(w, b))

本文採用的優化演算法為小批量隨機梯度下降mini-batch stochastic gradient descent,進行計算數值解

algorithm:先選取一組模型引數初始化,例如隨機選取,本文採用高斯隨機過程;接下來對引數進行多次迭代,降低loss function;在每次迭代中隨機取樣樣本集,即min-batch;然後求小批量中資料樣本的平均損失有關模型引數的導數(梯度);最後用該值乘以學習率learning rate作為迭代減少量

本文採用mxnet框架autograd對引數進行求導

from mxnet import nd, autograd

import random

num_inputs = 2 #特徵向量維數

num_samples = 1000 #樣本點數目

true_w = nd.array([2, -3.4]) #真實w值

true_b = 3.4 #真實bias

#產生均值為0,方差為1的資料

features = nd.random.normal(loc = 0, scale = 1, shape = (num_samples, num_inputs))

labels = nd.dot(features, true_w.t) + true_b

#對label加入方差為0.01的雜訊

labels += nd.random.normal(loc = 0, scale = 0.01, shape = labels.shape)

#w,b 初始化,w方差為0.01的隨機產生,b為0

w = nd.random.normal(loc = 0, scale = 0.01, shape = (num_inputs, 1))

b = nd.zeros(shape=(1,))

#隨機產生min-batch的資料集

def data_set(batch_size, features, labels):

num_features = len(features)

temp = list(range(num_features))

random.shuffle(temp)

for i in range(0, num_features, batch_size):

j = nd.array(temp[i: min(i+batch_size, num_features)])

yield features.take(j), labels.take(j)

# l2正規化的損失函式

def square_loss(y_hat, y):

return (y_hat - y.reshape(y_hat.shape)) ** 2 / 2

#建立w,b的梯度

w.attach_grad()

b.attach_grad()

#線性回歸**

def linreg(x, w , b):

return nd.dot(x, w) + b

#隨機梯度下降,更新引數params

def sgd(params, lr, batch_size):

for param in params:

#print(param.grad)

param[:] = param - lr * param.grad / batch_size

def main():

batch_size = 10 #min-bacth的大小

epochs = 10 #迭代次數

loss = square_loss

net = linreg

lr = 0.1 #學習率

for epoch in range(epochs):

for x, y in data_set(batch_size, features, labels):

with autograd.record():

l = loss(net(x, w, b), y) #計算loss function

l.backward() #反向傳播

sgd([w, b], lr, batch_size) #更新引數

train_loss = loss(net(features, w, b), labels)

print('epoch %d, loss %f' % (epoch+1, train_loss.mean().asnumpy()))

print(w, b)

main()

人工神經網路 線性整流函式

引用 線性整流函式 20263760?fr aladdin 線性整流函式 rectified linear unit,relu 又稱修正線性單元,是一種人工神經網路中常用的啟用函式 activation function 通常指代以斜坡函式及其變種為代表的非線性函式。通常意義下,線性整流函式指代數學...

神經網路多元線性回歸

jupyter notebook import pandas as pd import numpy as np import tensorflow as tf import matplotlib.pyplot as plt matplotlib inline 資料 讀取資料 data pd.read...

從機器學習到神經網路

人工智慧已經是各大 經常聚焦的話題,人工智慧 機器學習 深度學習與神經網路之間究竟是怎樣的關係?神經網路是深度學習的重要基礎,作為實現人工智慧的技術之一,曾經在歷史的長河中沉睡了數十年,為何又能夠重新甦醒 熠熠生輝。本文將詳細介紹神經網路的前生今世,以及它的基本結構 實現形式和核心要點。歡迎感興趣的...