神经网络简介( 三 )


例子: 计算偏导数
我们将继续假设我们的数据集中只有Alice:

神经网络简介

文章插图
 
我们初始化所有的权重为1,所有的偏差为0 。如果我们执行一个前馈通过网络,我们得到:
神经网络简介

文章插图
 
该网络输出 ypred =0.524,这并没有特别偏向男性(0)或女性(1) 。我们来计算∂L/∂w1:
神经网络简介

文章插图
 
提醒: 我们在前面为我们的 sigmoid函数推导出了f'(x) = f(x) * (1 - f(x)) 。
我们做到了!这告诉我们,如果我们增加w1,L就会相应地增加一点点 。
训练:随机梯度下降法
我们现在有了训练神经网络所需的所有工具! 我们将使用一种称为随机梯度下降(SGD)的优化算法,它告诉我们如何改变权重和偏差以最小化损失 。它基本上就是这个更新方程:
神经网络简介

文章插图
 
η是一个称为学习率的常数,它控制我们训练的速度 。我们所做的就是从w1中减去η∂L/∂w1:
  • 如果∂L/∂w1是正数,w1会减小,从而使得L也减小 。
  • 如果∂L/∂w1 是负数,w1会增加,从而使得L也减小 。
如果我们对网络中的每一个权重和偏差都这样做,损失就会慢慢减小,我们的网络就会改善 。
我们的训练过程如下:
  1. 从数据集中选择一个样本 。这就是称其为随机梯度下降的原因——我们一次只对一个样本进行操作 。
  2. 计算所有关于权重或偏差的损失的偏导数(例如∂L/∂w1、∂L/∂w2等等) 。
  3. 使用更新方程来更新每个权重和偏差 。
  4. 回到步骤1 。
让我们实际看一下!
代码: 一个完整的神经网络
终于是时候实现一个完整的神经网络了:
神经网络简介

文章插图
 

神经网络简介

文章插图
 

神经网络简介

文章插图
 

神经网络简介

文章插图
 

神经网络简介

文章插图
 
你可以自己运行/测试这段代码(https://repl.it/@vzhou842/An-Introduction-to-Neural-Networks ) 。你也可以在Github上找到它 。(https://github.com/vzhou842/neural-network-from-scratch )
随着网络的学习,我们的损失逐渐减小:
神经网络简介

文章插图
 
我们现在可以用这个网络来预测性别:
神经网络简介

文章插图
 
现在怎么办?
你成功了!现在来快速回顾一下我们所做的:
  • 介绍了神经元——神经网络的构建块 。
  • 在我们的神经元中使用了sigmoid激活函数 。
  • 看到了神经网络只是连接在一起的神经元 。
  • 创建了一个带有体重和身高的数据集,并将其作为输入(或特征),性别作为输出(或标签) 。
  • 学习了损失函数和均方误差(MSE)损失 。
  • 意识到训练一个网络只是最小化它的损失 。
  • 使用反向传播计算偏导数 。
  • 利用随机梯度下降法(SGD)对网络进行训练 。
还有很多事情要做:
  • 使用合适的机器学习库(如Tensorflow、Keras和PyTorch)来测试更大/更好的神经网络 。
  • 使用Keras构建你的第一个神经网络 。
  • 在你的浏览器中修补一个神经网络 。
  • 发现除了sigmoid之外的其它激活函数,如Softmax 。
  • 发现除了SGD之外的其它优化器 。
  • 阅读我的《卷积神经网络(CNNs)介绍》 。CNNs给计算机视觉领域带来了革命性的变化,其功能非常强大 。
  • 阅读我的《递归神经网络(RNNs)介绍》 。RNNs经常用于自然语言处理(NLP) 。
我可能会在将来写这些主题或类似的主题,所以如果你想获得关于新文章的通知,请订阅我吧 。
感谢阅读!
 
英文原文:https://victorzhou.com/blog/intro-to-neural-networks/ 译者:Nothing




推荐阅读