• 机器学习面笔试-神经网络篇


    1.为什么引入非线性激励函数?

    因为如果不用非线性激励函数,每一层都是上一层的线性函数,无论神经网络多少层,输出都是输入的线性组合,与只有一个隐藏层效果一样。相当于多层感知机了。所以引入非线性激励函数,深层网络就变得有意义了,可以逼近任意函数。

    2.常用的激励函数

    1)sigmoid:将输出实值压缩到0-1之间。 缺点:(输入非常大或非常小的时候)容易梯度消失;sigmoid函数是非0均值的,下一层的神经元将从上一层神经元得到的非0 均值的信号作为输入,再结合w计算梯度,始终都是正的。(可根据batch调节)
    2)Tanh:是0均值的。
    3)Relu(修正线性单元):好处:收敛快,求梯度简单。具有稀疏特性。
    (相比于sigmoid:sigmoid反向传播求误差梯度时,求导计算量很大,而relu求导简单;对于深层网络,sigmoid反向传播时,在sigmoid接近饱和区时,变换太缓慢,导数趋0,从而无法完成深层网络的训练;Relu会使一部分神经元的输出为0,造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题。)
    缺点:训练的时候很脆弱,一个非常大的梯度流过一个Relu神经元后,不会对其他数据有激活现象了,设置较小的学习率,这种情况会不那么频繁。
    activation1
    activation2
    参考【这里

    3.常用损失函数[更多]

    0-1损失; 感知损失
    Hinge损失; log损失、交叉熵
    平方损失; 指数损失; 绝对值损失

    loss_function

    延伸阅读1
    延伸阅读2

    4.BP,SGD公式推导

    5.参数的更新方式

    (1) Vanilla update: x+=learningratedx
    (2) Momentum update动量更新:
    v=μvlearningratedx # integrate velocity
    x+=v # integrate position
    (3) Nesterov Momentum:
    xahead=x+μv
    v=μvlearningratedxahead
    x+=v
    (4) Adagrad:
    (自适应的方法,梯度大的方向学习率越来越小,由快到慢) cache+=dx2
    x+=learningratedx/(np.sqrt(cache)+eps)
    (5) Adam: m=β1m+(1β1)dx
    v=β2v+(1β2)(dx2)
    x+=learningratem/(np.sqrt(v)+eps)

  • 相关阅读:
    redis配置文件参数说明及命令操作
    在Window 下安装Redis数据库
    eclipse怎样在线安装hibernate tools插件并使用
    eclipse如何优化构建的速度(Building)
    java实现敏感词过滤(DFA算法)
    eclipse编码格式设置
    Jquery Ajax简单封装(集中错误、请求loading处理)
    Vue简单封装axios—解决post请求后端接收不到参数问题
    vue项目实现记住密码功能
    vue路由的两种模式配置以及history模式下面后端如何配置
  • 原文地址:https://www.cnblogs.com/siucaan/p/9623113.html
Copyright © 2020-2023  润新知