Course2-Week1:
https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Advanced%20Learning%20Algorithms/week1
机器学习笔记(五)
- 1️⃣神经网络(Neural Network)
- 2️⃣前向传播(Forward propagation)
- 3️⃣用 TensorFlow 搭建神经网络
- 4️⃣徒手搭建神经网络
1️⃣神经网络(Neural Network)
🎈神经网络是模仿大脑的神经元之间传递的一个过程,如下图:
左图中, 神经网络模拟生物上神经元的传递,将数据输入神经元后将输出作为电信号传递给下一个神经元。右图中,展示了一个简单的神经元模型,即一个简单的神经网络,后一个神经元将前一个神经元的输出视为自己的输入,最终得出一个结果输出。
🎈那这种神经网络的结构有何作用呢?面向怎样的需求情况呢,首先对于一个最简单的分类逻辑回归问题(判断衣服是否畅销),可以用一个神经元来完成,将价格 p r i c e price price 视为这个神经元的输入,将 s i g m o i d sigmoid sigmoid 作为神经元的激活函数(用于输出结果的函数),最后输出衣服畅销的概率是多少,这是一个最简单的神经网络,也可以称为单层感知机。
对于一个稍微复杂的问题,我们需要将价格、运费、营销、材质作为输入,过个一个有三个神经元的神经网络层,输出三个值(1个神经元输出一个值):负担能力、意识、感知质量,最后是通过这三个值来预测畅销的概率,这就是运用神经网络的典型案例。网络中的每一层都有名字,最开始作为输入数据的这层为输入层(input layer),最终输出结果的这层为输出层(output layer),由于我们在模型中只关心输入和输出,不是很关心中间的过程,所以中间的层次被称为隐藏层(hidden layer)。
🎈Multiple hidden layers(multilayer perceptron 多层感知机)
🎈Face recognition
🎈Car classification
✨神经网络层的工作原理
对于: a j [ l ] = g ( w ⃗ j [ l ] ⋅ a ⃗ [ l − 1 ] + b j [ l ] ) 对于:a_j^{[l]}=g(\vec w_j^{[l]} \cdot \vec a^{[l-1]}+b_j^{[l]}) 对于:aj[l]=g(wj[l]⋅a[l−1]+bj[l])
- a j [ l ] a_j^{[l]} aj[l]— Activation value of layer l l l, unit(neuron) j j j ;
- g ( z ) g(z) g(z) — actibation function(sigmoid) ;
- w ⃗ j [ l ] , b j [ l ] \vec w_j^{[l]},b_j^{[l]} wj[l],bj[l] — Parameter w & b of layer l l l, unit j j j ;
- a ⃗ [ l − 1 ] \vec a^{[l-1]} a[l−1] — output of layer l − 1 l-1 l−1 (previous layer)
2️⃣前向传播(Forward propagation)
🎈从输入层开始,然后进行前向传播给隐藏层并计算隐藏层的激活项,然后继续前向传播并计算输出层的激活项得出预测结果
✨Tensorflow Code
✨前向传播的代码实现
3️⃣用 TensorFlow 搭建神经网络
4️⃣徒手搭建神经网络
def my_dense(a_in, W, b, g):
"""
Computes dense layer
Args:
a_in (ndarray (n, )) : Data, 1 example
W (ndarray (n,j)) : Weight matrix, n features per unit, j units
b (ndarray (j, )) : bias vector, j units
g activation function (e.g. sigmoid, relu..)
Returns
a_out (ndarray (j,)) : j units|
"""
units = W.shape[1]
a_out = np.zeros(units)
for j in range(units):
w = W[:,j]
z = np.dot(w, a_in) + b[j]
a_out[j] = g(z)
return(a_out)
def my_sequential(x, W1, b1, W2, b2):
a1 = my_dense(x, W1, b1, sigmoid)
a2 = my_dense(a1, W2, b2, sigmoid)
return(a2)
def my_predict(X, W1, b1, W2, b2):
m = X.shape[0]
p = np.zeros((m,1))
for i in range(m):
p[i,0] = my_sequential(X[i], W1, b1, W2, b2)
return(p)