赞
踩
神经网络(Neural Network)
深度学习算法(Deep Learning Algorithms)
决策树(Decision Trees)
Week1:Neural Network-inference(prediction)
Week2:Neural Network-training
Week3:Practical advice for building machine learning systems
Week4:Decision Trees
本周内容:神经网络+如何进行推理/预测
How to carry out inference or prediction.
神经网络算法的早期动机是试图构建模仿大脑运作的算法,后来改名为深度学习算法,随着互联网和大数据的兴起一度火了起来。
GPU-Graphic Processing Units
三个layer分别叫做:输入层(input layer)、隐藏层(hidden layer)、输出层(output layer);每一个layer对输入的向量维度(即特征个数)进行了缩减,直至输出层输出一个结果。
总的来说,深度学习算法通过对输入的特征和数据进行自行提取,不需要我们通过直觉或经验提取特征,在hidden layer算法会自己计算出需要使用的特征。这使深度学习算法具有强大的学习能力,和不易解释的特点。
主要问题——神经网络架构问题(neural network architecture):如何决定学习过程有多少个hidden layers,以及每个hidden layer有多少个神经元neurons。
有些文献管神经网络/深度学习叫多层感知器(multilayer perception),其实这几个叫法指同一个东西。
案例描述:训练一个神经网络模型,以一百万个像素灰度值作为特征向量为输入,以图片中人的身份为输出。过程中,算法会先从较小的像素窗格开始学习,找出特征;再下一个hidden layer中会进一步放大像素窗格,针对五官进行识别;接下来会对整体面部特征识别;最终得出结果。
假设一个神经网络模型有3个网络层:layer 0, layer 1, layer 2;
layer 0是输入层;
layer 1对上一层传入的数据进行逻辑回归处理,设有该层三个神经元,每个神经元是一个逻辑回归模型,在其w和b参数加上标[n]表示第n个网络层,加下标m表示第m个神经元;每个神经元输出一个activation值,此例中layer 1输出3个a值,即一个三维a向量;
layer 2只有一个神经元,同样对从layer 1输入的向量(3个数据)进行逻辑回归,最终输出一个标量作为结果。
每网络层的公式表示:
a
j
[
l
]
=
g
(
w
⃗
j
[
l
]
⋅
a
⃗
[
l
−
1
]
+
b
j
[
l
]
)
a_j^{[l]} = g\left( {\vec w_j^{[l]} \cdot {{\vec a}^{[l - 1]}} + b_j^{[l]}} \right)
aj[l]=g(w
j[l]⋅a
[l−1]+bj[l])
案例:手写数字识别(handwritten digit recognition)
所谓前向传播,就是从输入第一个图层到最后一个图层逐步递进的过程。
常用工具:TensorFlow和pytorch。这里用的是TensorFlow。
用units替换神经元(neurons),用dense替换神经层(layers)。
x = np.array([[200.0, 17.0]])
layer_1 = Dense(units=3, activation='sigmoid')
a1 = layer_1(x)
layer_2 = Dense(units=1, activation='sigmoid')
a2 = layer_2(a1)
if a2 >= 0.5:
yhat = 1
else:
yhat = 0
numpy中一维向量(1D vector)和二维矩阵(2D matrix)的区分:
x = np.array([[200, 17]]) #1*2矩阵[200 17]
y = np.array([[200],
[17]]) #2*1矩阵
z = np.array([200, 17]) #一维向量(200, 17)
在TensorFlow中使用矩阵而非向量。
【TensorFlow与numpy的转化】
layer_1 = Dense(units=3, activation="sigmoid")
layer_2 = Dense(units=1, activation="sigmoid")
model = Sequential([layer_1, layer_2]) #使用sequential形成神经网络,将layer串联在一起
model.compile(...)
x = np.array([[0,..., 245,...,17],
[0,...,200,...,184]])
y = np.array([1, 0])
model.fit(x, y)
model.predict(x_new) #前向传播(Forward Propagation),推理(inference)/预测(prediction)
x = np.array([200,17]) #1D array
w1_1 = np.array([1,2]) #layer1中有3个神经元(units),设定第一个神经元的逻辑回归参数
b1_1 = np.array([-1])
z1_1 = np.dot(w1_1,x)+b
a1_1 = sigmoid(z1_1) #建立逻辑回归模型并计算第一个units的activation,a1_1
# 以同样的方法计算a1_2,a1_3
a1 = np.array([a1_1, a1_2, a1_3])
W = np.array([[1,-3,5] #将3个units的二维w向量组合为矩阵形式 [2,4,-6]]) b = np.array([-1,1,2]) #将3个units的标量b组合为一维数组 a_in = np.array([-2,4]) #a_0/a_in/x,输入值 def dense(a_in,W,b,g): units = W.shape[1] #units=3 a_out = np.zeroes(units) #a_out=[0,0,0] for j in range(units): w = W[:,j] z = np.dot(w,a_in) + b[j] a_out[j] = g(z) return a_out #输出[1,0,1] def sequential(x): a1 = dense(x,W1,b1) a2 = dense(a1,W2,b2) a3 = dense(a2,W2,b2) a4 = dense(a3,W3,b3) f_x = a4 return f_X
AI与AGI。
前向传播的神经网络实现:
#使用了np.matmul和矩阵乘法
W = np.array([[1,-3,5] #将3个units的二维w向量组合为矩阵形式
[2,4,-6]])
b = np.array([-1,1,2]) #将3个units的标量b组合为一维数组
A_in = np.array([[-2,4]]) #A_in/x,输入值,注意这里使用了矩阵
def dense(A_in,W,B): #这里输入的A_in是矩阵
Z = np.matmul(A_in,W) + B #调用np.matmul进行矩阵乘法,提高了运算效率
A_out = g(Z)
return A_out #输出[[1,0,1]]矩阵
A = np.array([1,-1,0.1],
[2,-2,0.2])
AT = np.array([1,2], #A的转置
[-1,-2],
[0.1,0.2])
AT = A.T #A的转置的另一种表示
W = np.array([3,5,7,9],
[4,6,8,0])
Z = np.matmul(AT,W) #AT和W的矩阵相乘并赋值给Z,np.matmul
Z = AT @ W #矩阵相乘的另一种表示
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。