ML读书笔记(前向神经网络)

本文深入探讨深度学习中的关键概念,包括激活函数的选择及其对梯度消失的影响,ReLU函数的优缺点,权重初始化策略,Dropout如何减少过拟合,BN(Batch Normalization)在训练中的作用,以及CNN(卷积神经网络)的稀疏交互和参数共享特性。同时,文章还讨论了ResNet如何解决梯度消散问题。

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

A.

1. 拟合异或的问题

2个输入变量X和Y,写出异或真值表(<0,0>=>0, <0,1>=>1, <1,0>=>1, <1,1>=>0),拟合异或:

如果直接使用线性变化+激活函数,即f(aX+bY+c), f可以为sigmoid函数,根据激活函数单调性,由第1和第2条可得b是正数,由第1和第3条可得a是正数,第2和第4条可得a是负数和之前矛盾,第3和第4条可得b是负数和之前矛盾。

使用一层隐藏层+激活函数+线性输出层,隐藏层只有2个神经元,激活函数用ReLU; 神经元H1=X+Y-1;神经元H2=-X-Y+1; 前者得(-1,0,0,1),后者得(1,0,0,-1);经过ReLU,前者得Z1=(0,0,0,1),后者得Z2=(1,0,0,0);输出层-Z1-Z2+1, 得(0,1,1,0),即异或;

通用近似定理:至少一层具有任何一种“挤压”性质的激活函数的隐藏层+线性输出层,只要隐藏层单元足够多,可以以任意精度近似任何函数。(一层隐藏层,不太好学习到参数,所以通常都是多层)

 

B.

激活函数的作用:对于线性不可分问题(如异或函数),需要非线性变换对数据的分布进行重新映射。非线性激活函数,可避免多层网络等效于单层线性函数(M*N=V),从而获得更强大的拟合能力。

sigmoid函数的导数=p(1-p); tanh函数的样子:f(z)=(e^z-e^(-z))/(e^z+e^(-z)), 导数=1-p^2; ReLU函数的导数=当z>0时为1,当z<=0时为0。

梯度消失问题(导数接近0时,叫做“饱和”):sigmoid函数,当p接近0和接近1时,导数p(1-p)接近0;tanh函数,当p接近1和-1时,导数1-p^2接近0;

tanh(x)=2sigmoid(2x)-1,即tanh函数相当于sigmoid经过伸缩和平移后的;

ReLU的3个优点:1.不需要计算指数,计算复杂度低;2.ReLU的非饱和性可以有效解决梯度消失问题,提供相对宽的激活边界(x>0都是激活范围?);3. ReLU的单侧抑制提供了网络的稀疏表达能力(?)

ReLU的缺点:负输入值的梯度被置0,可能导致一定比例的神经元不可逆死亡,部分参数的梯度无法更新,可能导致训练失败。

ReLU, Leaky ReLU, PReLU, RReLU

 

C.

反向传播的梯度推导:注意最后一层,平方误差损失函数则不要加激活函数,交叉熵损失函数是softmax后的p和Label-y进行交叉熵,也不用激活函数(softmax函数之前也是线性变化,没有激活函数)

softmax的梯度推导,很麻烦;

平方误差损失函数,为什么最后一层不使用激活函数:从梯度消失的角度看,加了激活会使梯度更容易消失;

 

D.

权重初始化,除了bias可以初始化为0之外,不能全部初始化为相等值或者0:如果全相等,会导致每层所有神经元的值全相等,反向传播时每层梯度也全相等,废了;

随机初始化权重:(-\frac{1}{\sqrt{d}},\frac{1}{\sqrt{d}})   d是神经元的输入向量维度;

 

Dropout: 本质是模型集成,可降低过拟合。假设有N个神经元,则相当于2^N个不同的网络,进行集成;

书上说在测试阶段进行缩放;先进些的是在训练阶段期间对激活值进行缩放,而测试阶段保持不变,从而减少测试阶段计算量

当前Dropout被大量利用于全连接网络,而且一般人为设置为0.5或者0.3,而在卷积隐藏层由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积隐藏层中使用较少

Dropout为何有效:1. 减少神经元之间的联合适应性,可降低过拟合;2.下一层的节点减少受上一层某个特别“强”的节点影响,相当于加了正则化;3. 模型集成,可降低过拟合;

 

输入数据归一化的原因:如果数据分布离原点远,只分布在某一个象限,则要学习的分割超平面w就会1.学习慢,2.容易陷入局部最优;归一化以后数据分布落在原点的四周,有助于w的快速收敛;

归一化之后还得伸缩和平移,尽量恢复原始数据分布(?)

BN(Batch Normalization): 每个神经元(而不是整个层)(u,\sigma ,\gamma ,\beta的个数:BP神经网络的话,等于神经元的个数;卷积神经网络的话,等于卷积核的个数,在当前mini-batch上进行归一化;可使得网络在每次mini-batch都去拟合范围类似的数据分布,更容易训练;相当于给数据加了约束,增强了模型的泛化能力;

BN在测试时,就并没有batch的概念,因此,这个时候用的均值和方差是全量训练数据的均值和方差,这个可以通过移动平均法求得。

训练时用mini-batch的归一化,而不是全局归一化,目的是增强模型鲁棒性,减少过拟合。也正是因此,BN一般要求将训练集完全打乱,并用一个较大的batch值,否则,一个batch的数据无法较好得代表训练集的分布,会影响模型训练的效果。

\gamma ,\beta的作用:如果使用激活函数使用sigmoid,那么这个操作会强制输入数据分布在sigmoid接近线性的部分,接近线性的模型显然不好(影响整个模型的表达能力)。所以要学习伸缩和平移这两个参数;

 

E.

1. CNN的稀疏交互:输出之和输入的局部区域有关;物理意义:现实世界中的数据都具有局部的特征结构,先学习局部特征,再将局部特征组合起来得到复杂特征。

2. CNN的参数共享:卷积核对不同的输入区域用的同一组参数;物理意义:使得卷积层具有平移等变性,即先卷积再平移,和先平移再卷积,是等价的。

均值池化VS最大池化:均值池化对背景的保留效果更好;最大池化更好的提取纹理信息;

重叠池化:步长小于窗口时;空间金字塔池化:用多种size的池化,最后将结果拼在一起;

池化能保持对平移、伸缩、旋转操作的不变形(?)

CNN用在文本上:他用了2种embedding(1.预训练好就不改变的;2.随着Task训练而变化的),卷积的输入就变成了2个通道;

反向传播的公式推导,可以说明梯度消失问题,随着层数增多而明显消失;

ResNet:为了解决退化问题(层数越多,在训练集和测试集上的效果不升反降);原因:梯度消散;

把x直接加到后面两层的输出F(x)上,即H(x)=F(x)+x,这样F(x)只需要拟合H(x)-x即残差,使得多加一层不会让效果更差;反向传播时,梯度可直接传至两层之前;

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在 Linux 系统中,查找域名或主机名对应的 IP 地址是网络管理中的一项基础且关键任务,对于排查网络故障、调试网络问题以及监控网络服务是否正常运行等场景都非常重要。本文将介绍五种在 Linux 终端查询域名 IP 地址的方法。 首先,dig 命令(全称 Domain Information Groper)是一个功能强大的 DNS 查询工具,能够向 DNS 服务器发送查询请求并获取详细的响应信息。如果需要查询单个域名的 IP 地址,可以使用命令 dig 2daygeek.com +short 。此外,还可以通过编写 bash 脚本,将包含域名的文本文件中的域名逐个读取,然后利用 dig 命令进行查询,从而实现批量查询域名 IP 地址的功能。 其次,host 命令是一个简单易用的 DNS 查询工具,主要用于将域名解析为 IP 地址。要获取某个域名的 IP 地址,直接使用 host 2daygeek.com 即可。如果只想显示 IP 地址部分,可以通过管道结合 grep 和 sed 命令来实现,例如:host 2daygeek.com | grep "has address" | sed s/has address/-/g 。 再者,nslookup 命令也是一种常用的 DNS 查询工具,它支持交互式查询 DNS 信息。通过 nslookup 2daygeek.com 可以查询域名的 IP 地址。若要以非交互式的方式只显示 IP 地址,可以使用命令 nslookup 2daygeek.com | awk /^Address:/ {print $2} 。 另外,fping 命令与传统的 ping 命令不同,它不会直接进行 DNS 查询,而是通过发送 ICMP Echo Request(pi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值