- 博客(40)
- 收藏
- 关注

原创 2024年终总结和2025年规划
2024年的主线是AI基础的学习和读书,虽然AI学习花费了更多的时间,但是读书长久看来于我是更重要的事情,哈哈哈,因此先简单回顾一下读书记忆。
2025-02-15 19:39:03
1325

原创 跟着问题学18——万字长文详解Transformer
1.Transformer总体框架先来一张名图镇楼,哈哈哈。Transformer模型是深度学习模型的里程碑之作,但它并不是凭空产生的,相反,经过前面章节的学习,在学习transformer模型时,我们可以意识到其是站在巨人的肩膀上的,融合了很多之前创新的想法,比如残差网络,比如全连接层,比如词向量,比如注意力机制,比如seq2seq框架,取得了惊艳的效果。下面我们将一步一步抽丝剥茧,仔仔细细地完成transformer模型的学习。开始的开始,我们说深度学习就是用来拟合函数,是一个参数经
2024-12-15 17:59:47
1463

原创 跟着问题学13——RNN循环神经网络结构详解及代码实战
再来看一下序列T_seq和通道channel,RNN系列的序列T_seq是指一个连续的输入,比如一句话,一周的股票信息,而且这个序列是有时间先后顺序且互相关联的,而CNN系列的通道channel则是指不同角度的特征,比如彩色图像的RGB三色通道,过程中每个通道代表提取了每个方面的特征,不同通道之间是没有强相关性的,不过也可以进行融合。输入不是序列而输出为序列的情况怎么处理?但卷积神经网络并不能处理好这种关联性,不同时刻的输入之间是没有关联的,没有记忆能力,所以前面时刻的输出不能传递到后面的时刻。
2024-12-08 17:30:00
1702

原创 跟着问题学12——word2vec之CBOW和skip-gram详解
(3)此时队列中最小的频次(权重)为2,继续取出节点进行合并,过程依次为将1、3合并为node4(权重4),node2、4合并为node5(权重4),node1、node3合并为node6(权重4),node4、node5合并成node7(权重8),然后将node6和1合并成node8(权重9),最后将node7和node8合并为node9(权重17)得到Huffman树,如下图所示。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑和关注的词之间的距离大小,只要在上下文之内即可。
2024-12-07 20:32:56
1397

原创 跟着问题学10——ResNet网络详解及代码实战
如果F(x)对于提高模型的训练精度无作用,自然梯度下降算法就调整该部分的参数,使该部分的效果趋近于0,也就意味着主线路的F(x)变为0,这时网络的特征图流向就是只走“跳接”曲线(shortcut connection),此时H(x)=F(x)+x=0+x=x了,不必再去拟合H(x)=x,很明显,将网络的主干拟合函数F(x)优化为0比将最终输出拟合成恒等变换H(x)=x要容易得多。(3)每个残差模块(图中的conv2_x等)中的子结构是相同的,都是2个3*3的卷积层,通道数会有变化,在后面乘上重复的系数。
2024-12-01 16:20:25
2506

原创 跟着问题学3——卷积神经网络详解
尤为注意的是,输出通道数是卷积核的个数(事实上用组数更合适),这里是一组卷积核,因为输入通道数是2,所以这一组卷积核对应的通道数也是2,且参数各不相同(可以通过conv_layer.weight.shape验证,查看卷积核的 shape 是(1, 2, 2, 2),对应是(output_channel, input_channel, kernel_size, kernel_size)),输出特征图的计算方法就是卷积核和对应通道的输入特征图卷积,然后得到多通道的输出,再相加合并成一个输出特征图。
2024-11-23 16:29:55
951
原创 pytorch学习基础1——张量的创建与基础操作
张量在形式上就是多维数组,例如标量就是0维张量,向量就是一维张量,矩阵就是二维张量,而三维张量就可以想象RGB图片,每个channel是一个二维的矩阵,共有三个channel,还可以考虑更多。在进行张量的各种操作时,需要牢牢掌握张量的两个特性,一是维度dimension(dim),从0开始,在代码中,每一个括号代表一个维度,深度学习中一般会有3-4个维度(batch_size,channel,width,height),;形状shape,这里是指每个维度的数值大小。
2025-02-15 19:36:55
1020
原创 跟着问题学3.6——YOLO v1&v2&v3 详解
换种说法就是,原始图片(448/7)*(448/7)这片区域的信息(包括是否有目标,目标类别,目标边界框位置)包含在了最后的7*7特征图的对应一个像素点上(当然,实际上是1024尺寸的特征信息,因为通道数是1024)。我们知道,图像是长*宽的尺寸的像素点组成的,可以在图像上设置图像坐标系(比如以左上角为坐标原点,向右向下分别为x,y轴正方向),然后就可以使用边界框选中目标,边界框使用在图像坐标系上的坐标来表示,如下图,x,y,w,h,其中(x,y)是边界框左上角的像素坐标,w,h分别是边界框的宽和高。
2025-01-19 19:09:47
690
原创 跟着问题学3.3——Faster R-CNN详解及代码实战
可以看到,输入和最终的输出具有相同的高和宽,输出的通道数取决于卷积核的组数,每一通道的输出特征图由一组卷积核对输入特征不同通道相同位置的元素按权重累加得到。(3)RoI池化层输出统一尺度的候选框特征图;因为区域生成网络可以参与学习,我们可以定制一个只识别某几种对象的网络,例如图片中有人,狗,车,树,房子的时候,固定的算法可能会把他们全部提取出来,但区域生成网络经过训练可以只提取人所在的区域,其他对象所在的区域都会当作背景处理,这样区域生成网络输出的区域数量将会少很多,而且包含对象的可能性会很高。
2025-01-19 19:08:39
861
原创 跟着问题学3.5——MASK-RCNN详解及代码实战
这被称为是一种耦合关系,是不利于最终的结果的。同样的道理,我们通过class、box分支知道了候选框的类别是cat,那么我们将这个候选框在原图对应的GT(原图对应的GT是单通道的喔,目标区域为1,背景区域为0)上进行裁剪并将裁剪后图片缩放到28×28大小得到GTMask,此时计算GTMask和Mask分支的损失即可。如图所示,图中的虚线为特征图,黑色实线为建议区域,黑点为传统池化操作选择的采样点,在本文中,不对这些点进行量化操作,而是使用特征图中的四个边界点使用双线性插值的方法代表这些采样点。
2025-01-19 19:07:52
970
原创 跟着问题学13——RNN循环神经网络结构详解及代码实战
再来看一下序列T_seq和通道channel,RNN系列的序列T_seq是指一个连续的输入,比如一句话,一周的股票信息,而且这个序列是有时间先后顺序且互相关联的,而CNN系列的通道channel则是指不同角度的特征,比如彩色图像的RGB三色通道,过程中每个通道代表提取了每个方面的特征,不同通道之间是没有强相关性的,不过也可以进行融合。输入不是序列而输出为序列的情况怎么处理?但卷积神经网络并不能处理好这种关联性,不同时刻的输入之间是没有关联的,没有记忆能力,所以前面时刻的输出不能传递到后面的时刻。
2025-01-19 19:07:00
922
1
原创 跟着问题学10——ResNet网络详解及代码实战
如果F(x)对于提高模型的训练精度无作用,自然梯度下降算法就调整该部分的参数,使该部分的效果趋近于0,也就意味着主线路的F(x)变为0,这时网络的特征图流向就是只走“跳接”曲线(shortcutconnection),此时H(x)=F(x)+x=0+x=x了,不必再去拟合H(x)=x,很明显,将网络的主干拟合函数F(x)优化为0比将最终输出拟合成恒等变换H(x)=x要容易得多。(3)每个残差模块(图中的conv2_x等)中的子结构是相同的,都是2个3*3的卷积层,通道数会有变化,在后面乘上重复的系数。
2025-01-19 19:06:19
921
原创 跟着问题学3——卷积神经网络详解
尤为注意的是,输出通道数是卷积核的个数(事实上用组数更合适),这里是一组卷积核,因为输入通道数是2,所以这一组卷积核对应的通道数也是2,且参数各不相同(可以通过conv_layer.weight.shape验证,查看卷积核的shape是(1,2,2,2),对应是(output_channel,input_channel,kernel_size,kernel_size)),输出特征图的计算方法就是卷积核和对应通道的输入特征图卷积,然后得到多通道的输出,再相加合并成一个输出特征图。
2025-01-19 19:05:27
1059
原创 跟着问题学3.6——YOLO v1&v2&v3 详解
换种说法就是,原始图片(448/7)*(448/7)这片区域的信息(包括是否有目标,目标类别,目标边界框位置)包含在了最后的7*7特征图的对应一个像素点上(当然,实际上是1024尺寸的特征信息,因为通道数是1024)。我们知道,图像是长*宽的尺寸的像素点组成的,可以在图像上设置图像坐标系(比如以左上角为坐标原点,向右向下分别为x,y轴正方向),然后就可以使用边界框选中目标,边界框使用在图像坐标系上的坐标来表示,如下图,x,y,w,h,其中(x,y)是边界框左上角的像素坐标,w,h分别是边界框的宽和高。
2025-01-12 19:51:27
1756
原创 跟着问题学3.6——YOLO v2&v3 详解及代码实战
YOLO v2系列和v1的模型框架基本是一致的,针对YOLO v1存在的问题,其改进点在两处,一是把原来提取成7*7的特征图变为13*13,这样能够预测更多的物体,同时对小物体的检测效果也有所提升;前面介绍v1的时候讲到,模型是在原始图上划分7*7个网格区域,然后在每个区域上直接预测2个框的位置,判断这些框内是否含有目标,但是预测准确度不高,对比同时代R-CNN系列(预测精度较高)的思路,是预测边界框相对推荐框(anchor)的偏移量,于是YOLO v2也从这个方面进行了优化。每个λ都是一个权重值。
2025-01-12 19:49:39
815
原创 跟着问题学3.6——YOLO v1详解及代码实战
首先输入到特征提取网络的是3*448*448的图片,经过特征提取网络之后输出的是1024*7*7的特征图,通道数我们认为是不同形式的特征,仅就特征图的尺寸来说,从448*448变到7*7,这就意味着7*7特征图上的每个“像素点”实际上等效于原始图片的(448/7)*(448/7)这样一片区域。前面讲到传统方法是先枚举出大量的边界框,然后在判断边界框是否包含目标,R-CNN系列在这个思想的基础上进行了优化改进,包括设置边界框的数量和格式,以及根据真实框去调整边界框的偏移量。那么是如何提取特征的呢?
2025-01-11 20:02:15
1053
原创 跟着问题学3.5——MASK-RCNN详解及代码实战
这被称为是一种耦合关系,是不利于最终的结果的。同样的道理,我们通过class、box分支知道了候选框的类别是cat,那么我们将这个候选框在原图对应的GT(原图对应的GT是单通道的喔,目标区域为1,背景区域为0)上进行裁剪并将裁剪后图片缩放到28×28大小得到GT Mask,此时计算GT Mask和Mask分支的损失即可。如图所示,图中的虚线为特征图,黑色实线为建议区域,黑点为传统池化操作选择的采样点,在本文中,不对这些点进行量化操作,而是使用特征图中的四个边界点使用双线性插值的方法代表这些采样点。
2025-01-05 20:38:55
1329
原创 跟着问题学3.3——Faster R-CNN详解及代码实战
可以看到,输入和最终的输出具有相同的高和宽,输出的通道数取决于卷积核的组数,每一通道的输出特征图由一组卷积核对输入特征不同通道相同位置的元素按权重累加得到。(3)RoI池化层输出统一尺度的候选框特征图;因为区域生成网络可以参与学习,我们可以定制一个只识别某几种对象的网络,例如图片中有人,狗,车,树,房子的时候,固定的算法可能会把他们全部提取出来,但区域生成网络经过训练可以只提取人所在的区域,其他对象所在的区域都会当作背景处理,这样区域生成网络输出的区域数量将会少很多,而且包含对象的可能性会很高。
2025-01-05 19:45:00
1083
原创 Fast R-CNN损失函数
可以看到训练过程类似于一种“迭代”的过程,不过只循环了2次。因为区域生成网络可以参与学习,我们可以定制一个只识别某几种对象的网络,例如图片中有人,狗,车,树,房子的时候,固定的算法可能会把他们全部提取出来,但区域生成网络经过训练可以只提取人所在的区域,其他对象所在的区域都会当作背景处理,这样区域生成网络输出的区域数量将会少很多,而且包含对象的可能性会很高。举一个通俗的例子,如果区域生成网络选取了某个包含了脸的左半部分的区域,它会判断这个区域可能包含对象,并且要求区域范围向右扩大一些,
2025-01-04 20:56:21
762
原创 跟着问题学3.3——Faster R-CNN详解及代码实战(1)
Faster-RCNN 是 RCNN 和 Fast-RCNN 的进化版,最大的创新是引入了区域生成网络 (RPN - Region Proposal Network),区域生成网络支持使用机器学习代替固定的算法找出图片中可能包含对象的区域,精度比固定的算法要高很多,而且速度也变快了。从R-CNN到Fast R-CNN,再到本文的Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。
2025-01-04 20:52:55
1141
原创 pytorch学习笔记汇总
在代码中创建张量Tensor数据类型时,除了封装张量本身的数据data外,还会附加张量的一些性质和操作,例如数据的梯度(grad),创建tensor的函数(grad_fun,是求导的关键),是否为叶子节点(is_leaf),是否需要梯度(require_grad)。这里使用 input*channel 为 3,output_channel 为 1 ,卷积核大小为 3×3 的卷积核nn.Conv2d(3, 1, 3),使用nn.init.xavier_normal*()方法初始化网络的权值。
2024-12-30 19:15:00
1108
原创 PyTorch 的 Autograd代码实现
而以 TensorFlow 为代表的静态图,每次都先设计好计算图,需要的时候实例化这个图,然后送入各种输入,重复使用,只有当会话结束的时候创建的图才会被释放(不知道这里我对 tf.Session 的理解对不对,如果有错误希望大佬们能指正一下),就像我们之前举的那个水管的例子一样,设计好水管布局之后,需要用的时候就开始搭,搭好了就往入口加水,什么时候不需要了,再把管道都给拆了。这么做会导致相关的导数的计算结果错误,因为我们在计算导数的过程中还会用到 b 的值,但是它已经变了(和正向传播过程中的值不一样了)。
2024-12-30 19:00:00
924
原创 跟着问题学23番外——反向传播算法理论及pytorch自动求导详解
而以 TensorFlow 为代表的静态图,每次都先设计好计算图,需要的时候实例化这个图,然后送入各种输入,重复使用,只有当会话结束的时候创建的图才会被释放(不知道这里我对 tf.Session 的理解对不对,如果有错误希望大佬们能指正一下),就像我们之前举的那个水管的例子一样,设计好水管布局之后,需要用的时候就开始搭,搭好了就往入口加水,什么时候不需要了,再把管道都给拆了。这么做会导致相关的导数的计算结果错误,因为我们在计算导数的过程中还会用到 b 的值,但是它已经变了(和正向传播过程中的值不一样了)。
2024-12-23 20:29:54
1573
原创 跟着问题学23番外——反向传播算法理论(1)
这就是对一个前向传播中的某个参数进行梯度更新的过程,当然这个更新过程不可能是一次完成的,在进行完一次反向传播更新梯度后紧接着会进行下一个前向传播,然后重新计算误差,这样多次循环之后会使得损失值逐渐降低,当达到某个设定值时这个循环更新梯度的过程就会停止,从而完成一整个训练流程。在神经网络中,梯度计算是通过反向传播算法来实现的。这是一个简单的两层神经网络,输入数据是1*2的向量,中间一个含有3个神经元的隐藏层,输出层为1*1的向量,简化起见,偏置b设为0,激活函数选择ReLu,根据前面推导的公式,
2024-12-22 18:48:12
567
原创 跟着问题学22番外——优化算法理论及代码详解
对于SGD/MBGD而言,每次使用的损失函数只是通过这一个小批量的数据确定的,其函数图像与真实全集损失函数有所不同,所以其求解的梯度也含有一定的随机性,在鞍点或者局部最小值点的时候,震荡跳动,因为在此点处,如果是训练集全集带入即BGD,则优化会停止不动,如果是mini-batch或者SGD,每次找到的梯度都是不同的,就会发生震荡,来回跳动。这个损失函数L的变量就是θ,其中L中的参数是整个训练集,换句话说,目标函数(损失函数)是通过整个训练集来确定的,训练集全集不同,则损失函数的图像也不同。
2024-12-22 17:20:25
886
原创 跟着问题学番外1-深度学习中的损失函数详解
前面的文章我们已经从模型角度介绍了损失函数,对于神经网络的训练,首先根据特征输入和初始的参数,前向传播计算出预测结果,然后与真实结果进行比较,得到它们之间的差值。损失函数又可称为代价函数或目标函数,是用来衡量算法模型预测结果和真实标签之间吻合程度(误差)的函数。通常会选择非负数作为预测值和真实值之间的误差,误差越小,则模型越好。有了这个损失函数,我们便可以采用优化算法更新网络参数,使得训练样本的平均损失最小。而损失函数根据任务的不同,也可以分为不同的类型,下面进行介绍。
2024-12-21 20:13:50
1123
原创 跟着问题学19——BERT详解
在训练的初始阶段,我们可以设置一个很大的学习率,但是我们应该在后面的迭代中设置一个较小的学习率。因为在初始的迭代时,我们远没有收敛,所以设置较大的学习率带来更大的步长是可以的,但在后面的迭代中,我们已经快要收敛了,如果学习率(导致步长)较大可能会错过收敛位置(极小值)。在我们的例子中,单词pretraining不在BERT的词表中。假设我们有一个数据集。可能是因为我们的词表太小了,然而哪怕有一个超大的词表,先不说这样的词表会带来内存和性能方面的压力,仍然有可能无法处理没有出现过的词(词表中也没有出现过)。
2024-12-15 19:25:47
640
原创 跟着问题学17——attention与seq2seq详解及代码实战
query向量需要经过st-1(维度是dec_hid_dim*1),key矩阵需要经过h1:x(维度是enc_hid_dim*seq_len),变换后的key和query向量维度是自定义的,可以定为dec_hid_dim,所以大的变换矩阵维度。,这个是描述数据本质特征的向量,这个特征值会对应一个“索引”,类似字典中的键,称为键向量(key),而所谓的注意力就是查询匹配当前的特征和原始数据特征的相似度,就需要从当前数据特征中挖掘一个用于查询匹配的向量,即查询向量(query)。
2024-12-14 21:30:00
747
原创 跟着问题学16——seq2seq详解及代码实战
在模型训练和预测时,如果输入是有前一个输出向量的,预测时可以直接使用前一个预测出来的输出值,但是训练时一般使用的是真实文本的输出向量,不然一旦预测错误一个输出值,后面的也都将会受到影响,所谓一步错,步步错。通过上文可以知道编码器和解码器之间有一个共享的中间向量(上图中的向量c)来传递信息,而且它的长度是固定的,意味着编码器要将整个序列的信息压缩进一个固定长度的向量中去。Encoder-Decoder强调的是模型设计(编码-解码的一个过程),Seq2Seq强调的是任务类型(序列到序列的问题)。
2024-12-14 17:05:39
1908
原创 跟着问题学15——GRU网络结构详解及代码实战
隐藏层有T_seq个隐状态H_t(和输入序列长度相同),每个隐状态H_t类似于一个channel,对应着T_seq中的t时刻的输入特征;再来看一下序列T_seq和通道channel,RNN系列的序列T_seq是指一个连续的输入,比如一句话,一周的股票信息,而且这个序列是有时间先后顺序且互相关联的,而CNN系列的通道channel则是指不同角度的特征,比如彩色图像的RGB三色通道,过程中每个通道代表提取了每个方面的特征,不同通道之间是没有强相关性的,不过也可以进行融合。而越接近0则代表”遗忘“的越多。
2024-12-08 19:48:34
1575
原创 跟着问题学14——LSTM网络结构详解及代码实战
隐藏层有T_seq个隐状态H_t(和输入序列长度相同),每个隐状态H_t类似于一个channel,对应着T_seq中的t时刻的输入特征;再来看一下序列T_seq和通道channel,RNN系列的序列T_seq是指一个连续的输入,比如一句话,一周的股票信息,而且这个序列是有时间先后顺序且互相关联的,而CNN系列的通道channel则是指不同角度的特征,比如彩色图像的RGB三色通道,过程中每个通道代表提取了每个方面的特征,不同通道之间是没有强相关性的,不过也可以进行融合。),水平线贯穿图的顶部。
2024-12-08 17:11:36
1348
1
原创 跟着问题学11——基础语言模型&词向量基础详解
它的思路是通过训练,将每个词都映射到一个较短的词向量上来,能够体现词与词之间的关系,所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。一个比较实用的场景是找同义词,得到词向量后,假如想找出与“爱”相似的词,建立好词向量后,对计算机来说,只要拿这个词的词向量跟其他词的词向量一一计算欧式距离或者cos距离,得到距离小于某个值的那些词,就是它的同义词。(3)考虑是否微调,用新的数据调整词嵌入。还要注意的是每个词在不同的语料库和不同的训练方法下,得到的词向量可能是不一样的。
2024-12-07 17:35:22
1141
原创 跟着问题学9——GoogLeNet网络详解及代码实战
在这之前的AlexNet、VGG等结构都是通过增大网络的深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfitting、梯度消失、梯度爆炸等,GoogLeNet则做了更加大胆的网络结构尝试,Inception的提出则从另一种角度来提升训练结果:能更高效的利用计算资源,在相同的计算量下能提取到更多的特征,从而提升训练结果,采用了Inception结构的GoogLeNet深度只有22层,其参数约为AlexNet的1/12,是同时期VGGNet的1/3。
2024-12-01 18:51:16
1259
1
原创 跟着问题学8——VGG网络详解及代码实战
例如,在VGG中,使用了3个3x3卷积核(27个参数)来代替7x7卷积核(49个参数),使用了2个3x3卷积核来代替5*5卷积核,这样做的主要目的是在保证具有相同感知野的条件下,提升了网络的深度,在一定程度上提升了神经网络的效果。VGG网络层的深度是可调整的,其核心在于设计了多组卷积块,每组卷积块由多个相同的小尺寸(一般为3*3)的卷积核组成,卷积核填充为1,卷积核保持输入特征图的高和宽不变,然后再接上一个尺寸为2*2,步长也为2的池化层,用以将特征图尺寸减半。池化后的特征图尺寸变为112*112*64;
2024-11-30 19:26:27
1550
原创 跟着问题学7——AlexNet网络详解及代码实战
简单举例来说,池化核大小3 × 3, 扩充边缘padding = 0,步长stride = 2,因此其FeatureMap输出大小为(13-3+0×2+2)/2=6, 即C5输出为6×6×256(此处未将输出分到两个GPU中,若按照论文将分成两组,每组为6×6×128);论文中的Maxpooling采用的是重叠池化,传统池化时卷积核提取的每一小块特征不会发生重合,譬如kernel size记为k×k,步长stride记为s,当k = s时,就不会发生重合,当k> s时,就会发生重合,即重叠池化。
2024-11-30 12:29:18
1087
原创 跟着问题学6——LeNet及代码实战详解
因此 if __name__ == '__main__': 的作用就是控制这两种情况执行代码的过程,在 if __name__ == '__main__': 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。最后有3个全连接层,它们的输出特征尺寸分别是120、84和10,其中10为输出的类别个数。上图是模型训练的基本框架,其中红色字体的是最基础的必不可少的部分,其它的部分是为了优化训练和可视化附加的,写代码时只需要按照这个框架往里填充内容即可。
2024-11-24 19:34:09
765
原创 跟着问题学5——深度学习中的数据集详解(1)
数据集的两个重要因素一是原始数据特征,比如图片,文字等,二是标签,比如类别或者物体分割时的位置等,在存储时要分清他们的位置,便于读取。数据的形式在深度学习中是什么样的呢?数据在深度学习中是以多维数组的形式存储的,而数据代表的就是样本的数字信息特征,一般来说,对于单一样本的特征,可以像影响房价的因素那样是一维向量数组,也可以是图像特征那样是二维数组,还可以是后面介绍的语言文字那样是一维词向量数组,在训练的时候,通常会批量读取训练,所以数据集会在原有的维度基础上加一个batch_size的维度。
2024-11-24 16:28:57
1540
原创 跟着问题学4——深度学习网络训练中的参数初始化和批正则化等技巧
考虑一层具有n个输入神经元的全连接层,如果权重的方差为1/n,那么通过该层的输出的方差为1/n * n/2 = 1/2(每个神经元权重独立同分布,所以为n/2)。这样,每一层的输出都具有合适的范围,有助于提供良好的梯度传播和训练稳定性。不过,这里需要注意区分训练误差(training error)和泛化误差(generalization error),通俗来讲,前者指模型在训练数据集上表现出的误差,后者指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
2024-11-23 20:22:13
962
原创 跟着问题学2——传统神经网络-多层感知机详解
以下是反向传播算法的基本步骤:正向传播:将输入特征通过网络前向传递,输出网络的预测值。计算预测误差:将网络的预测值与真实值(标签)代入损失函数,计算得到网络的预测误差。反向传播:根据链式法则,将输出层的预测误差回传到前面各层,逐层计算预测误差对每个参数的导数。计算参数更新值:根据预测误差对每个参数的导数,结合设置的超参数学习率,计算每个参数的更新量(一般是导数*学习率,这就是优化算法作用的位置,可以为梯度下降法等)。更新权重:一般是原参数减去参数的更新量,更新它们的数值。
2024-11-17 20:32:03
1283
原创 跟着问题学1——传统神经网络-线性回归及代码详解
因为鹿和马的差异很大,鹿头上有角,体型,毛皮,色泽,四肢特征都不一样。另一方面,也有很多人格物致知,尝试在大量经验的基础上归纳分析从而获得规律,揭示现在,预示未来,比如通过大量观察,发现月亮会在一个月的时间内经历完整的圆缺过程,那么就可以判断,每个月的十五附近都会是月亮最圆的时候。映入眼帘一只鹿,观察到它的鹿角,皮毛,颜色,四肢,大人告诉这是一只鹿,小孩记住了,再次看到的时候,如果小孩子说是马,大人多次进行纠正,最后针对这些特征便可以辨认出这是鹿,只是我们并不知道大脑进行了怎样的完善。那么第二个问题来了?
2024-11-10 17:48:53
1154
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人