使用tensorflow和Keras的初级教程


使用tensorflow和Keras的初级教程文章插图
介绍人工神经网络(ANNs)是机器学习技术的高级版本 , 是深度学习的核心 。 人工神经网络涉及以下概念 。 输入输出层、隐藏层、隐藏层下的神经元、正向传播和反向传播 。
简单地说 , 输入层是一组自变量 , 输出层代表最终的输出(因变量) , 隐藏层由神经元组成 , 在那里应用方程和激活函数 。 前向传播讨论方程的具体形式以获得最终输出 , 而反向传播则计算梯度下降以相应地更新参数 。
深层神经网络当一个ANN包含一个很深的隐藏层时 , 它被称为深度神经网络(DNN) 。 DNN具有多个权重和偏差项 , 每一个都需要训练 。 反向传播可以确定如何调整所有神经元的每个权重和每个偏差项 , 以减少误差 。 除非网络收敛到最小误差 , 否则该过程将重复 。
算法步骤如下:

  • 得到训练和测试数据以训练和验证模型的输出 。 所有涉及相关性、离群值处理的统计假设仍然有效 , 必须加以处理 。
  • 输入层由自变量及其各自的值组成 。 训练集分为多个batch 。 训练集完整的训练完称为一个epoch 。 epoch越多 , 训练时间越长
  • 每个batch被传递到输入层 , 输入层将其发送到第一个隐藏层 。 计算该层中所有神经元的输出(对于每一个小批量) 。 结果被传递到下一层 , 这个过程重复 , 直到我们得到最后一层的输出 , 即输出层 。 这是前向传播:就像做预测一样 , 除了所有中间结果都会被保留 , 因为它们是反向传播所需要的
  • 然后使用损失函数测量网络的输出误差 , 该函数将期望输出与网络的实际输出进行比较
  • 计算了每个参数对误差项的贡献
  • 该算法根据学习速率(反向传播)执行梯度下降来调整权重和参数 , 并且该过程会重复进行
【使用tensorflow和Keras的初级教程】重要的是随机初始化所有隐藏层的权重 , 否则训练将失败 。
例如 , 如果将所有权重和偏移初始化为零 , 则给定层中的所有神经元将完全相同 , 因此反向传播将以完全相同的方式影响它们 , 因此它们将保持相同 。 换句话说 , 尽管每层有数百个神经元 , 但你的模型将表现得好像每层只有一个神经元:它不会太聪明 。 相反 , 如果你随机初始化权重 , 你就打破了对称性 , 允许反向传播来训练不同的神经元
激活函数激活函数是梯度下降的关键 。 梯度下降不能在平面上移动 , 因此有一个定义良好的非零导数是很重要的 , 以使梯度下降在每一步都取得进展 。 Sigmoid通常用于logistic回归问题 , 但是 , 也有其他流行的选择 。
双曲正切函数这个函数是S形的 , 连续的 , 输出范围在-1到+1之间 。 在训练开始时 , 每一层的输出或多或少都以0为中心 , 因此有助于更快地收敛 。
整流线性单元对于小于0的输入 , 它是不可微的 。 对于其他情况 , 它产生良好的输出 , 更重要的是具有更快的计算速度 。 函数没有最大输出 , 因此在梯度下降过程中可能出现的一些问题得到了很好的处理 。
为什么我们需要激活函数?假设f(x)=2x+5和g(x)=3x-1 。 两个输入项的权重是不同的 。 在链接这些函数时 , 我们得到的是 , f(g(x))=2(3x-1)+5=6x+3 , 这又是一个线性方程 。 非线性的缺失表现为深层神经网络中等价于一个线性方程 。 这种情况下的复杂问题空间无法处理 。
使用tensorflow和Keras的初级教程文章插图
损失函数在处理回归问题时 , 我们不需要为输出层使用任何激活函数 。 在训练回归问题时使用的损失函数是均方误差 。 然而 , 训练集中的异常值可以用平均绝对误差来处理 。 Huber损失也是基于回归的任务中广泛使用的误差函数 。
当误差小于阈值t(大多为1)时 , Huber损失是二次的 , 但当误差大于t时 , Huber损失是线性的 。 与均方误差相比 , 线性部分使其对异常值不太敏感 , 并且二次部分比平均绝对误差更快地收敛和更精确的数字 。


推荐阅读