| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 机器视觉基础知识(2) -> 正文阅读 |
|
[人工智能]机器视觉基础知识(2) |
1.神经网络 ? 深度学习:是一种特殊的机器学习,具有强大的能力和灵活性。它通过学习将世界表示为嵌套的层次结构,每个表示都与更简单的特征相关,而抽象的表示则用于计算更抽象的表示。 ? 传统的机器学习需要定义一些手工特征,从而有目的的去提取目标信息, 非常依赖任务的特异性以及设计特征的专家经验。而深度学习可以从大数据中先学习简单的特征,并从其逐渐学习到更为复杂抽象的深层特征,不依赖人工的特征工程,这也是深度学习在大数据时代受欢迎的一大原因。 1.4前向传播与反向传播 ? 假设输入数据集为 $ D={x_1, x_2, …, x_n} $,输出数据集为 $ y_1, y_2, …, y_n $。 ? 如果输入和输出是一样,即为自编码模型。如果原始数据经过映射,会得到不同于输入的输出。 假设有如下的网络层: ? 输入层包含神经元 $ i_1, i_2 $,偏置 $ b_1 $;隐含层包含神经元 $ h_1, h_2 $,偏置 $ b_2 $,输出层为 $ o_1, o_2 , , , w_i $ 为层与层之间连接的权重,激活函数为 s i g m o i d sigmoid sigmoid 函数。对以上参数取初始值,如下图所示: 其中: 输入数据 $ i1=0.05, i2 = 0.10 $ 输入层 --> 输出层 $$ net_{h1} = w_1 * i_1 + w_2 * i_2 + b_1 * 1\ net_{h1} = 0.15 * 0.05 + 0.2 * 0.1 + 0.35 * 1 = 0.3775 $$ 神经元 $ h1 $ 的输出 $ o1 $ :(此处用到激活函数为 sigmoid 函数): o u t h 1 = 1 1 + e ? n e t h 1 = 1 1 + e ? 0.3775 = 0.593269992 out_{h1} = \frac{1}{1 + e^{-net_{h1}}} = \frac{1}{1 + e^{-0.3775}} = 0.593269992 outh1?=1+e?neth1?1?=1+e?0.37751?=0.593269992 同理,可计算出神经元 $ h2 $ 的输出 $ o1 $: o u t h 2 = 0.596884378 out_{h2} = 0.596884378 outh2?=0.596884378 隐含层–>输出层: n e t o 1 = w 5 ? o u t h 1 + w 6 ? o u t h 2 + b 2 ? 1 net_{o1} = w_5 * out_{h1} + w_6 * out_{h2} + b_2 * 1 neto1?=w5??outh1?+w6??outh2?+b2??1 n e t o 1 = 0.4 ? 0.593269992 + 0.45 ? 0.596884378 + 0.6 ? 1 = 1.105905967 net_{o1} = 0.4 * 0.593269992 + 0.45 * 0.596884378 + 0.6 * 1 = 1.105905967 neto1?=0.4?0.593269992+0.45?0.596884378+0.6?1=1.105905967 o u t o 1 = 1 1 + e ? n e t o 1 = 1 1 + e 1.105905967 = 0.75136079 out_{o1} = \frac{1}{1 + e^{-net_{o1}}} = \frac{1}{1 + e^{1.105905967}} = 0.75136079 outo1?=1+e?neto1?1?=1+e1.1059059671?=0.75136079 这样前向传播的过程就结束了,我们得到输出值为 $ [0.75136079 , 0.772928465] $,与实际值 $ [0.01 , 0.99] $ 相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。 **反向传播 ** ? 1.计算总误差 总误差:(这里使用Square Error) E t o t a l = ∑ 1 2 ( t a r g e t ? o u t p u t ) 2 E_{total} = \sum \frac{1}{2}(target - output)^2 Etotal?=∑21?(target?output)2 但是有两个输出,所以分别计算 $ o1 $ 和 $ o2 $ 的误差,总误差为两者之和: E o 1 = 1 2 ( t a r g e t o 1 ? o u t o 1 ) 2 = 1 2 ( 0.01 ? 0.75136507 ) 2 = 0.274811083 E_{o1} = \frac{1}{2}(target_{o1} - out_{o1})^2 = \frac{1}{2}(0.01 - 0.75136507)^2 = 0.274811083 Eo1?=21?(targeto1??outo1?)2=21?(0.01?0.75136507)2=0.274811083. E o 2 = 0.023560026 E_{o2} = 0.023560026 Eo2?=0.023560026. E t o t a l = E o 1 + E o 2 = 0.274811083 + 0.023560026 = 0.298371109 E_{total} = E_{o1} + E_{o2} = 0.274811083 + 0.023560026 = 0.298371109 Etotal?=Eo1?+Eo2?=0.274811083+0.023560026=0.298371109. ? 2.隐含层 --> 输出层的权值更新: 以权重参数 $ w5 $ 为例,如果我们想知道 $ w5 $ 对整体误差产生了多少影响,可以用整体误差对 $ w5 $ 求偏导求出:(链式法则) ? E t o t a l ? w 5 = ? E t o t a l ? o u t o 1 ? ? o u t o 1 ? n e t o 1 ? ? n e t o 1 ? w 5 \frac{\partial E_{total}}{\partial w5} = \frac{\partial E_{total}}{\partial out_{o1}} * \frac{\partial out_{o1}}{\partial net_{o1}} * \frac{\partial net_{o1}}{\partial w5} ?w5?Etotal??=?outo1??Etotal????neto1??outo1????w5?neto1?? 1.5超参数 将数据集划分成训练集、验证集及测试集。 sigmoid 激活函数 函数的定义为:
f
(
x
)
=
1
1
+
e
?
x
f(x) = \frac{1}{1 + e^{-x}}
f(x)=1+e?x1?,其值域为
(
0
,
1
)
(0,1)
(0,1)。
SoftPlus 激活函数 函数定义为: σ ( z ) j = e z j ∑ k = 1 K e z k \sigma(z)j = \frac{e^{z_j}}{\sum{k=1}^K e^{z_k}} σ(z)j=∑k=1Kezk?ezj??。 Softmax 多用于多分类神经网络输出 1.如果输出是 0、1 值(二分类问题),则输出层选择 sigmoid 函数,然后其它的所有单元都选择 Relu 函数。 相对宽阔的兴奋边界; 稀疏激活性; ReLU 函数从图像上看,是一个分段线性函数,把所有的负值都变为 0,而正值不变,这样就成为单侧抑制。 因为有了这单侧抑制,才使得神经网络中的神经元也具有了稀疏激活性。 稀疏激活性:从信号方面来看,即神经元同时只对输入信号的少部分选择性响应,大量信号被刻意的屏蔽了,这样可以提高学习的精度,更好更快地提取稀疏特征。当 $ x<0 $ 时,ReLU 硬饱和,而当 $ x>0 $ 时,则不存在饱和问题。ReLU 能够在 $ x>0 $ 时保持梯度不衰减,从而缓解梯度消失问题。 8.Softmax 函数 1.7.Batch_Size 如果数据集比较小,可采用全数据集的形式,好处是: 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。 1.Batch_Size 太小,模型表现效果极其糟糕(error飙升)。 1.8归一化 ? BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。 PCA Jittering:首先按照RGB三个颜色通道计算均值和标准差,再在整个训练集上计算协方差矩阵,进行特征分解,得到特征向量和特征值,用来做PCA Jittering; Random Scale:尺度变换; Random Crop:采用随机图像差值方式,对图像进行裁剪、缩放;包括Scale Jittering方法(VGG及ResNet模型使用)或者尺度和长宽比增强变换; Horizontal/Vertical Flip:水平/垂直翻转; Shift:平移变换; Rotation/Reflection:旋转/仿射变换; Noise:高斯噪声、模糊处理; Label Shuffle:类别不平衡数据的增广; 引用https://github.com/scutan90/DeepLearning-500-questions/blob/master/ch03_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80/%E7%AC%AC%E4%B8%89%E7%AB%A0_%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80.md |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 0:38:47- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |