一、神经网络的“齿轮”:张量运算
1.dot 点积运算 relu(x) 是max(x,0)
#W,b,input均为2D张量
output=relu(dot(W,input)+b)
2.张量点积
import numpy as np
z = np.dot(x,y)
两个向量之间的点积是一个标量,矩阵和向量点积返回向量,矩阵和矩阵点积返回矩阵。
#两矩阵
def naive_matrix_dot(x,y):
assert len(x.shape) == 2
assert len(y.shape) == 2
assert x.shape[1] == y.shape[0]
z=np.zeros((x.shape[0],y.shape[1]))
for i in range(x.shape[0]):
for j in range(y.shape[1]):
row_x = x[i,:]
row_y = y[:,j]
z[i,j] = naive_vector_dot(row_x,column_y)
return z
3.张量变形
在神经网络预处理时:
train_images = train_images_reshape(6000,28*28)
#改变行和列
>>>x=np.array([[0.,1.],
[2.,3.],
[4.,5.]])
>>>print(x.shape)
(3,2)
>>>x=x.reshape((6,1))
>>>print(x)
array([[0.],
[1.],
[2.],
[3.],
[4.],
[5.]])
>>>x=x.reshape((2,3))
>>>x
array([[0.,1.,2.],
[3.,4.,5.]])
#转置
x=np.transpose(x)
二、神经网络的“引擎”:基于梯度的优化
1.每个神经层都用下述方法对输入数据进行变换:
output = relu(dot(W,input) + b)
2.一开始权重矩阵取较小随机值(随机初始化),然后根据反馈信号逐渐调节权重(训练,也就是机器学习中的学习)
3.利用网络中所有运算都可微(可以被求导),计算损失相对于网络系数的梯度,然后向梯度的反方向改变系数,从而使损失降低。
4.动量方法找到全局最小点。
2022/7/6