美文网首页
一、神经网络基础

一、神经网络基础

作者: 屉屉 | 来源:发表于2018-11-19 23:00 被阅读0次

    typora-copy-images-to: ipic

    一、神经网络基础

    1.logistic回归

    即使用sigmoid激活函数处理一个简单的神经网络 y = W^Tx +b,将其输出映射到区间(0,1)之间,方便做二分类。其中W、b为神经网络的两个参数矩阵。

    sigmoid函数:a=\frac{1}{1+e^{-z}}

    sigmoid函数-7372818

    2.logistic回归的损失函数

    定义一个凸函数(容易优化),来衡量预测值和真实值之前的差距,即衡量模型在训练样本上的表现。

    在logistic常用对数损失函数衡量模型表现:

    对于单个样本:loss(h_{\theta}(x),y) = -y_ilog(h_{\theta}(x)) - (1-y_i)log(1-h_{\theta}(x))

    ​ 衡量单个样本的预测准确性。

    对于全部样本:J(w,b)=\frac{1}{m}\sum_{i=1}^mL(a^i,y^i)=-\frac{1}{m}\sum_{i=1}^m[y^iloga^i+(1-y^i)log(1-a^i)]

    ​ 衡量参数W、b的效果。

    3.梯度下降法(Gradient Descent)

    即minimize J(w,b)的方法。

    沿着成本函数 J(w,b)下降最快的方向更新参数W、b,以罩到全局最优解使得成本函数最小。

    算法实现:

    • 初始化参数(\theta_0, \theta_1..., \theta_n)

    • 求当前位置损失函数的梯度(下降最快的方向、导数/偏导数)

      \frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)

    • 用步长(学习率)* 梯度确定下降的距离

      \alpha\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)

    • 确定下降的距离是否小于阈值,判断是否需要继续

    • 更新参数

      \theta_i = \theta_i - \alpha\frac{\partial}{\partial\theta_i}J(\theta_0, \theta_1..., \theta_n)

    • 确定更新参数后的损失函数是否小于阈值

    4.导数(emmm...)

    请兄弟姐妹们自行翻微积分课程。

    即函数在某个点的变化率,是函数的一个局部性质。

    5.计算图及其导数计算

    计算图

    即正向传播计算输出,反向传播计算导数的过程。

    6.向量化

    使用python的numpy库,消除代码中的显性for循环,让代码在大规模数据中的运算更加高效。

    在神经网络的构建中,尽量避免使用for循环,以免影响计算效率。

    Numpy文档:http://www.numpy.org

    向量化的计算速度显著优于for循环,且随着数据量上升,优势会更加明显。

    总之:尽量避免使用显性的for循环,向量化的计算会显著提醒计算速度。

    但是在循环梯度下降时,目前还没有更好的办法代替for循环。

    7.Python的广播

    Numpy的Universal functions 中要求输入的数组shape是一致的,当数组的shape不想等的时候,则会使用广播机制,调整数组使得shape一样,满足规则,则可以运算,否则就出错。

    广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度((trailing dimension,即从末尾开始算起的维度))的轴长相等,另外一种是有一方的长度为1。

    相关文章

      网友评论

          本文标题:一、神经网络基础

          本文链接:https://www.haomeiwen.com/subject/gvuzfqtx.html