SIGAI深度学习第三集 人工神经网络2
讲授神经网络的理论解释、实现细节包括输入与输出值的设定、网络规模、激活函数、损失函数、初始化、正则化、学习率的设定、实际应用等
大纲:
实验环节:
理论层面的解释:两个方面,1.数学角度,映射函数h(x)理论分析;2.和动物神经网络的区别。
实现细节问题:输入输出值该怎么设置,神经网络该建多少层,每层多少个神经元,选择什么样的激活函数和损失函数。
面临的挑战与改进措施:梯度消失,局部最小值,鞍点等。
实际应用情况:
实验环节:(通过代码实现)
设置网络的层数和各层神经元数量。设置激活函数和参数。设置训练参数,包括最大迭代次数,迭代终止阈值,学习率,动量项系数等。生成训练样本(用MINST数据集,全连接FC神经网络训练,96%以上准确率),关键是设置样本标签值(多分类,One-hot编码)。调用训练函数。
定义网络结构,设置好网络参数,直接调用train函数(caffe,tensorflow,opencv,或pytorch)训练就可以了。
理论层面的解释:数学特征(映射函数h(x)具有哪些性质);与动物神经网络系统的关系
映射函数h(X)——>Y,为一个多层复合函数。
万能逼近定理:证明了至少有一个隐藏层的神经网络,映射函数的可以拟合函数的可能性,要有多接近真实函数就有多接近。
可以构造出上面这样的函数,逼近定义在单位立方体空间中的任何一个连续函数到任意指定的精度。
另一种说法:
人工神经网络是对生物神经系统的模拟,但只是简单的模拟,在多个方面两者的机理是不同的。
人脑的单个神经元有很多复杂的结构,各个神经元在结构和功能上不是完全相同的,另外神经元之间的连接关系非常复杂。
在训练方式上,人脑的神经网络没有反向传播算法这种机制,在外界刺激下建立神经元之间连接通路的机制远比反向传播复杂。
前馈型人工神经网络本质上来说只是一个多层复合函数。
实现细节问题:对网络跑出来的精度影响非常大
输入与输出值的设定。网络的规模。激活函数的选择。损失函数的选择。权重的初始化。正则化。学习率的设定。动量项梯度下降法。
输入值与输出值设定:
类别型变量(如小学、初中、高中、本科...)、多分类问题(手写数字识别0,1,...)的类标签,都建议使用One-hot编码形式,而不要直接用整数标号。
输入值,输出值都建议做归一化,尤其是输入值一定要归一化,因为在激活函数计算值时,输入值太大或太小会造成浮点数上溢或下溢。
网络的规模:
神经元的层数,早期很小,现在很深。太深会梯度消失。样本太少网络不能太深,否则模型太复杂样本太少会出现过拟合问题,层数根据问题规模和训练样本的规模来定。
各层神经元数量。输入层与输出层是确定的(输入层神经元个数等于输入样本的维数,回归问题需要几个输出分量的向量就设置几个神经元,k分类输出层神经元为k个),隐含层根据经验而定,一般情况下,设置为2的n次方,以提高计算与存储效率。
层数、每一层的尺寸经过“试”验确定。
激活函数:
保证神经网络是一个非线性的映射(线性:n元一次函数),去掉激活函数,不管怎么复合都是线性映射。
激活函数应该是非线性、几乎处处可导、单调函数(一般是单调增),并且尽量避免饱和(f'(x)==0)。
常用的激活函数:sigmoid(sigmoid和逻辑斯蒂回归中的映射函数是一样的)、tanh(和sigmoid和相互推导)、ReLU、其他改进型。
饱和函数容易出现梯度消失问题。
损失函数:
回归问题用欧式距离(又叫均方误差)(||y*-y||22)损失函数,分类问题用交叉熵损失函数。
逻辑斯蒂回归和softmax回归用交叉熵损失函数,因为欧氏距离损失函数不能保证是凸函数,存在局部最小值点或鞍点,会收敛到不好的值,用交叉熵损失函数可以保证是凸函数,收敛到一个很好的值。
交叉熵损失 y是样本的标签向量真实值,ont-hot编码,只有一个为1其他都为0([0,1,0,0,0,...]T),是一个列向量,预测出来的向量值y*,神经网络最后一层一般是softmax(概率向量,每个分量0~1,和为1),因为yT中只有yi为1,所以L=-logyi*。当y和y*分布相同时,L达到最小值,即最好的情况。
证明: 当p(x)、q(x)两个分布相等的时候,交叉熵有极小值
拉格朗日法求解极值点,然后证明此极值点是极小值点。
证明交叉熵函数是凸函数就可以证明求得的极值点是极小值点了。
交叉熵函数的Hession矩阵(L对x向量的二次导数)为:
严格正定矩阵,对任意x,xTAx>0,因此L为严格的凸函数,因此该极值点为唯一的极小值点。
权重初始化:
逻辑斯蒂回归、softmax回归等不带等式或不等式约束的,一般把x初始化为全1或全0就可以了。而神经网络一般不这样做,会造成失效,一般是采用随机数进行初始化,编程中一般采用均匀分布和正态分布的随机数。
caffe中权重的初始化为
正则化:
为了抵抗过拟合问题,在目标函数,如损失函数中加一个正则化项。
学习率:
为了使wk+1在wk的邻域内,设置学习率。
一般设置为接近于0的正数。可以采用更复杂的策略,训练过程中动态调整。
动量项梯度下降法:
为了加快算法的收敛速度减少震荡,引入了动量项,动量项累积了之前的权重更新值。
面临的挑战与改进措施:
梯度消失问题。退化问题。局部极小值问题。鞍点问题。
梯度消失问题:
如果激活函数导数的绝对值小于1,多次连乘之后,误差项接近于0,导致根据它计算的参数梯度值接近于0,参数无法有效更新。
产生梯度消失的原因是激活函数的饱和性
所以网络层数深的时候,一般用ReLU激活函数或ReLU的变种,因为>0时导数为1,ReLU一定程度上可以缓解梯度消失问题。
与之相反的是梯度爆炸,即f'>>1,浮点数溢出,可以通过归一化解决。
退化问题:
神经网络的训练误差和测试误差会随着层数的增加而增大,所以不一定是层数越多越好。(不同于过拟合,过拟合是训练集上表现很好、测试集表现差,而退化是训练集、测试集表现都差。)
解决办法为残差网络、高速公路网络。
局部极小值问题:
神经网络的优化目标不是一个凸优化,有陷入局部极小值的风险。像SVM、逻辑斯蒂回归LR、softmax回归,他们的目标函数是凸函数,因此不会有局部极小值问题,他们优化问题是凸优化问题,而神经网络的优化问题不是凸优化问题。
鞍点问题(类似于局部极小化问题):
虽然极值为0,但不是局部极小值,Hession矩阵既不正定也不负定。
由于存在鞍点问题、局部极小值问题、梯度消失问题、退化问题等,自从1986年反向传播算法发明以后到2012年alexnet算法又流行起来,尤其1993年以后,这些年神经网络很不受待见,而是SVM、adboost反而占了上风。
神经网络损失函数的曲面:
实际应用:
人脸检测
人脸识别
光学字符识别
手写字符识别
自然语言处理
手写数字识别:
SIGAI深度学习第三集 人工神经网络2的更多相关文章
- SIGAI深度学习第八集 卷积神经网络2
讲授Lenet.Alexnet.VGGNet.GoogLeNet等经典的卷积神经网络.Inception模块.小尺度卷积核.1x1卷积核.使用反卷积实现卷积层可视化等. 大纲: LeNet网络 Ale ...
- SIGAI深度学习第七集 卷积神经网络1
讲授卷积神经网络核心思想.卷积层.池化层.全连接层.网络的训练.反向传播算法.随机梯度下降法.AdaGrad算法.RMSProp算法.AdaDelta算法.Adam算法.迁移学习和fine tune等 ...
- SIGAI深度学习第六集 受限玻尔兹曼机
讲授玻尔兹曼分布.玻尔兹曼机的网络结构.实际应用.训练算法.深度玻尔兹曼机等.受限玻尔兹曼机(RBM)是一种概率型的神经网络.和其他神经网络的区别:神经网络的输出是确定的,而RBM的神经元的输出值是不 ...
- SIGAI深度学习第五集 自动编码器
深度学习模型-自动编码器(AE),就是一个神经网络的映射函数,f(x)——>y,把输入的一个原始信号,如图像.声音转换为特征. 大纲: 自动编码器的基本思想 网络结构 损失函数与训练算法 实际使 ...
- SIGAI深度学习第四集 深度学习简介
讲授机器学习面临的挑战.人工特征的局限性.为什么选择神经网络.深度学习的诞生和发展.典型的网络结构.深度学习在机器视觉.语音识别.自然语言处理.推荐系统中的应用 大纲: 机器学习面临的挑战 特征工程的 ...
- SIGAI深度学习第一集 机器学习与数学基础知识
SIGAI深度学习课程: 本课程全面.系统.深入的讲解深度学习技术.包括深度学习算法的起源与发展历史,自动编码器,受限玻尔兹曼机,卷积神经网络,循环神经网络,生成对抗网络,深度强化学习,以及各种算法的 ...
- TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN
前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...
- 深度学习与CV教程(4) | 神经网络与反向传播
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- 深度学习与CV教程(6) | 神经网络训练技巧 (上)
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
随机推荐
- 搭建apache2.4+php7+mysql+phpmyadmin
apache2.2不支持php7,会报错 cannot load php7apache2_4.dll into server 前排提示:保证安装文件夹和我的一致可以省事很多哦 下载地址 下载apach ...
- 某 游戏公司 php 面试题
1.实现未知宽高元素的水平垂直居中,至少两种方法. <div, class="father"> <div class="son">< ...
- zookeeper-data
1. The ZooKeeper Data Model 1.1 ZNodes Znodes maintain a stat structure: The Stat structure for each ...
- js之拖拽事件
js之拖拽事件 api:https://www.runoob.com/jsref/event-ondrag.html 拖拽事件是js原生的事件,使用时在div上添加 draggable="t ...
- Java 之 泛型
一.泛型概述 集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成 Object 类型.当我们取出一个对象,并且进行相应的操作,这时必须采用类型转换. 先观察下面代码: publ ...
- SQL中新建注释、查询注释和说明
1.查询注释 SELECT A.name AS table_name, B.name AS column_name, C.value AS column_description FROM sys.ta ...
- CircularSlider半弧形滑动条
前言 这边文章主要 是写 一.半圆弧型滑块的设计 最近项目中需要用到半圆弧形滑块,其作用和UISlider差不多,用于拖动改变播放音乐的播放进度. 大概样子是这样的: 效果展示 特点如下: 滑动响应区 ...
- KVM之磁盘管理工具qemu-img小结
基本语法: qemu-img command [command options] 主要参数: info : 查看镜像的信息: create: 创建镜像: check: 检查镜像: convert: 转 ...
- 第二章 Django之python安装(1)
Python 安装 Django 由百分百的纯 Python 代码编写而成,因此必须在系统中安装 Python .Django 需要 2.3 或更高版本的 Python.如果使用的是 Linux 或 ...
- docker 部署 elasticsearch + elasticsearch-head + elasticsearch-head跨域问题 + IK分词器
0. docker pull 拉取elasticsearch + elasticsearch-head 镜像 1. 启动elasticsearch Docker镜像 docker run -di ...