Deep Learning Notes - 1.3浅层神经网络

本文详细介绍了单隐藏层神经网络的结构与计算流程,包括权重与偏置的初始化、正向传播过程中的向量化计算、激活函数的选择及其作用,以及反向传播中梯度下降的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Deep Learning Notes - 1.3浅层神经网络

单隐藏层的神经网络

一些约定

  • 上标 [i][i] 指第 ii
  • 上标 (i) 指第 ii 个样例
  • 下标 i 指特定层中的第 ii 个节点
    • 例如: aj[i] 表示第 ii 层中的第 j 个节点
    • 通常输入层不看作一个标准的层,所以输入层常被记为第 00

    范例网络

    一个两层神经网络

    其中a[0]为输入层,a[1]a[1]为隐藏层,a[2]a[2]为输出层。

    神经网络的计算(一组训练样例)

    一个神经元中的计算

    每个神经元中,都会进行上图所示的计算,那么所有神经元的计算为:

    z[1]1=w[1]T1x+b[1]1,a[1]1=σ(z[1]1)z[1]2=w[1]T2x+b[1]2,a[1]2=σ(z[1]2)z[1]3=w[1]T3x+b[1]3,a[1]3=σ(z[1]3)z[1]4=w[1]T4x+b[1]4,a[1]4=σ(z[1]4)z1[1]=w1[1]Tx+b1[1],a1[1]=σ(z1[1])z2[1]=w2[1]Tx+b2[1],a2[1]=σ(z2[1])z3[1]=w3[1]Tx+b3[1],a3[1]=σ(z3[1])z4[1]=w4[1]Tx+b4[1],a4[1]=σ(z4[1])

    向量化后为:

    z[1]=W[1]x+b[1]a[1]=σ(z[1])z[2]=W[2]a[1]+b[2]a[2]=σ(z[2])z[1]=W[1]x+b[1]a[1]=σ(z[1])z[2]=W[2]a[1]+b[2]a[2]=σ(z[2])

    其中:

    W[1]=w[1]T1w[1]T2w[1]T3w[1]T4W[1]=[−w1[1]T−−w2[1]T−−w3[1]T−−w4[1]T−]

    x=x1x2x3x=[x1x2x3]

    并且bbz均为纵向堆叠。

    多组训练样例的向量化

    假设一共有mm组样例,那么向量化之后如下:

    Z[1]=W[1]A[0]+b[1]A[1]=σ(Z[1])Z[2]=W[2]A[1]+b[2]A[2]=σ(Z[2])

    其中:X=A[0]X=A[0]

    X=|x(1)||x(2)|...|x(m)|nx×mX=[|||x(1)x(2)...x(m)|||]nx×m

    A[1]=|a[1](1)||a[1](2)|...|a[1](m)|A[1]=[|||a[1](1)a[1](2)...a[1](m)|||]

    并且ZZ也为横向堆叠。

    激活函数

    为什么要使用激活函数

    如果不适用激活函数,即对结果处理为g(z)=z,那么最终输出层输出的是xx的线性组合,中间隐藏层便失去了意义(不如去掉)。

    而只有面对回归问题时,线性激活函数g(z)=z才应用于输出层。

    激活函数σ(z)σ(z)

    σ(z)=11+ezσ(z)=11+e−z

    sigmod

    sigmod激活函数的使用范围不大,仅在二元分类网络的输出层使用较多。

    激活函数tanh(z)tanh(z)

    tanh[z]=ezezez+eztanh[z]=ez−e−zez+e−z

    tanh

    效果略好于sigmod函数,但使用也不常用,因为训练速度稍慢。

    激活函数ReLU(z)ReLU(z)

    ReLU(z)=max(0,z)ReLU(z)=max(0,z)

    ReLU

    此函数使用最为广泛,基本上作为默认使用。

    激活函数leakyReLU(z)leakyReLU(z)

    leakyReLU(z)=max(cz,z)leakyReLU(z)=max(cz,z)

    一般 cc 取一个很小的数,例如 0.01。具体值需要根据训练情况而定。

    leaky relu

    此函数效果比ReLU要好,但是使用并不广泛。

    梯度下降

    向量化之后的计算过程:

    dZ[2]=A[2]YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]g[1](z[1])dW[1]=1mdZ[1]XTdb[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)dZ[2]=A[2]−YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]∗g[1]′(z[1])dW[1]=1mdZ[1]XTdb[1]=1mnp.sum(dZ[1],axis=1,keepdims=True)

    上式中的 是指逐个相乘。

    随机初始化

    矩阵W需要随机化,而bb置为全零就可以了。

    W[1]=np.random.randn((2,2))0.01b[1]=np.zeros((2,1))W[2]=np.random.randn((1,2))0.01b[2]=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值