首页 > 其他分享 >深度学习

深度学习

时间:2024-03-10 12:22:05浏览次数:24  
标签:函数 导数 损失 学习 神经网络 深度 数据 神经元

深度学习

数据是学习的核心

概念梳理:

1.感知机:

感知机是二分类的线性分类模型,感知机的目的是求出将输入数据划分为两类的分离超平面。

他需要合适的,符合预期的权重才能够正常工作。

感知机是构成神经网络的最小构成单位。可以理解为神经元的仿生结构。

2.神经网络:

历史:

1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字--“感知器”(Perceptron)(有的文献翻译成“感知机”,下文统一用“感知器”来指代)。

  感知器是当时首个可以学习的人工神经网络。Rosenblatt现场演示了其学习识别简单图像的过程,在当时的社会引起了轰动。

  人们认为已经发现了智能的奥秘,许多学者和科研机构纷纷投入到神经网络的研究中。美国军方大力资助了神经网络的研究,并认为神经网络比“原子弹工程”更重要。这段时间直到1969年才结束,这个时期可以看作神经网络的第一次高潮。

模拟人类神经元的工作机理。由输入,输出和计算功能组成,分别照应了人类神经元中树突,轴突,细胞核的功能。输入接受信号由计算做出反应并将反应信号输出。--摘抄

在形式上,神经网络是节点与连接构成的网络,每个连接上存在一个“权重”,将输入的信号计算加权后输出给下一个神经元便完成了一次神经传递。

神经网络可分为单层神经网络(即为感知机),和多层神经网络,层数=输入层+隐藏层+输出层-1在意义上感知机层数与实际与权重有关,也有些人会层数=输入层+隐藏层+输出层与层的数目有关,本书使用的是前者。感知机没有隐藏层,只有单次权重。

3.权重:权重是神经网络中最重要的东西。权重的合适程度直接决定了神经网络是否是优良的。训练一个神经网络就是使其权重达到最佳的过程。

在权重作用的过程时,即节点与节点间传输信号的过程中偏值也起了一定的作用,偏值会改变神经元被启动的难易程度。

神经元能否被启动取决于传入的信号是否达到峰值,偏值影响峰值大小。

4.计算:计算在神经元中进行,神经元具备存储和计算的功能。将输入(x)与输出(y)挂钩的函数(f(x))我们称之为激活函数,激活函数代表的神经元中枢细胞体对输入的数据进行反应的过程。

正常神经的反应过程是:输入的信号传至细胞体,细胞体对信号进行判断后输出新的信号并输出。

5.激活函数

激活函数旨在帮助神经网络学习数据中的复杂模式。在神经元中,输入的input经过一系列加权求和后作用 的另一个函数

----摘抄[深度学习笔记:如何理解激活函数?(附常用激活函数) - 知乎 (zhihu.com)]

激活函数可以适用在复杂环境中,人类神经元的传递过程是复杂的,倘若只用权重来改变输入和输出,那么无论电脑神经网络在形式上(隐藏层数目多少)有多么复杂,其最后的结果仍会是线性相加的结果,其复杂度难以达到人类神经网络的复杂程度。

插入片段:文本内容记录:

回归问题和分类问题。

不管是分类,还是回归,其本质是一样的,都是对输入做出预测,并且都是监督学习。说白了,就是根据特征,分析输入的内容,判断它的类别(分类),或者预测其值(回归)。

两者的含义近似对立,分类问题即将事物归类,就像把人按照性别分为男女,按照身高规定大于1.7米为高否则为低,其结果是离散的。而回归问题则是根据已有数据进行预测

两者都可以用来判断:对于身高,分类问题的判断会根据标准给出这个人是否可以被分到高的一组,其输出的结果只能为是或否。而回归问题则是根据视觉感受判断这个人的身高,其输出的结果可以是连续的一串数字。

两者都可以用于预测:在天气预报中,预测天气,只能在晴,雨,阴,雪中选择,此为分类问题。而在预测气温时,通常给出的是一个区间,此为回归问题。

结果的离散和连续为结果特征的差别,其本质区别在于损失函数的形式不同

6.损失函数:

当大学生在宿舍中攀比谁的电脑性能更好时,如果我们只是说电脑的价格,电脑的硬件,不太清晰的人是无法听懂的,也不明白其中的价值,但如果使用类似某大师的跑分程序,我们可以获得直观的电脑评分,通过电脑的评分我们能够轻松选看出谁的电脑的性能更高。

损失函数在这里就起到了一个跑分的作用,不过损失函数的结果表明的是神经网络的恶劣程度,即损失函数的结果越大,神经网络的准确性越差。

损失函数表明的是神经网络返回预测值与真实值的差异程度。预测值与真实值之间的差异值被称为损失值

损失函数的工作原理:损失函数利用于训练神经网络的过程中。测试数据()被送入神经网络并且返回预测值,损失函数利用预测值和真实值求出损失值,之后神经网络根据损失函数的结果反向传播更新各个参数,使得后来的损失值减小,使得神经网络向真实靠拢,达到学习的效果。

将神经网络的准确率具象化为损失函数的结果,通过损失函数计算神经网络调整前后的结果来判定对神经网络的调整是否是进步的。同时,将神经网络进步这个抽象问题转化为损失函数缩小这个具体的数学问题,同时函数的性质也为如何提高神经网络的准确率提供了依据。

作为函数,损失函数可以通过求某一点的导数(具体来说是梯度)来了解该点的走势,然后以这个导数为指引,逐渐更新参数。

one-hot表示

y =  [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
t = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
# t是用one-hot表示的真实值,y是用softmax函数生成的预测值(概率值)。
# one-hot表示中只有正确选项标记为1错误选项标记为0
# 在10个数中,只有“2”数字是正确的(从0开始数)其概率是0.6也就是说该神经网络在
# <此次>测试中有0.6概率正确。

梯度法:

为了了解梯度,我们先了解导数以及导数在程序中的实现。

导数表明可以表明函数图形中某个点的变化趋势,包括变化方向(增大还是减小),导数大于0,则此处的函数值随着自变量的增大有增大的趋势;变化速率,导数的绝对值越大,则表明该点函数值的变化快。

如果要在程序中利用导数,了解导数的图形含义是必要的,因为程序中求导的方法就是利用的图形意义。

导数的图形意义:导数的值等于函数图像中以该点为切点的切线的斜率。

如果是直线,该点的切线斜率也就是直线斜率,曲线的斜率我们会利用微分的方法求得

      		f(x+Δx) - f(x)
k =  lim	---------------# 将x+Δx 和x两个函数点连线,当Δx趋向于0时,该
	Δx->0	       Δx		 连线近似趋向于点x处的切线。
	
	
上式为导数的图形理解
但是在深度学习中,我们一般使用下式


      		f(x+Δx) - f(x-Δx)
k =  lim	---------------
	Δx->0	       2*Δx		 
	

OIP-C

导数的程序实现:
def numerical_diff(f, x):
	h = 0.0001
	return (f(x+h) - f(x-h)) / 2h
	
在上面的解读中,我们提出要求h无限趋近于0,但是因为在程序中存在舍入误差的缘故(是指因省略小数的精细部分的数值(比如,小数点第8位以后的数值)而造成最终的计算结果上的误差)
即 h = 1e-50
   print(h)
   >>>0.0
   因为h数字极小导致最后结果变为0.0使得导数的结果与正确值相差甚远。
   同时,因为h并不能像理想的那羊无限接近于0,所以如果最后➗h的结果的误差也会变大,为了缩小误差,取x前后各一个h的距离的两个点所连成的直线的斜率近似表示为x处的切线的斜率。这种算法也成为中心差分。

批mini-batch(小批量处理):

批是一种处理数据的方式,用通过样本近似代替整体的方法缩小计算量。

批大小的选择必须合适,过小的数据量难题代表整体,过大的数据量又无法显著达到减小计算量的目的。

减小计算量的益处:

1.当有1000个测试数据时,如果直接把1000个数据投入神经网络中计算,可能会对计算机的配置提出更高的需求,其次即便配置过关,其运行速度也不一定能达到理想状态。但如果将1000个数据分成10组,每次只投入100个数据,其对电脑的配置要求更低,同时,通过矩阵的并行性来缩短计算的时间,也可以使用多线程的方法来缩短计算时间(同时进行多个批次的处理,占用不同的进程,所以时间线上不冲突)。(当然,如果你只有10个小数据,那么再分成10个1份明显有些画蛇添足,所以要考虑每批的大小,和数据总量的大小问题)

2.如果数据的量级过大,比如上百万,上千万甚至是上亿的程度,我们也可以用分批的方法,随机选择一部分数据作为样本数据,用这部分样本数据作为测试数据进行操作。即将测试数据分批,但是只选取其中几批进行操作。

常用激活函数:

恒等函数:将输入的值原封不动的输出

阶跃函数:

# 类比人类神经元,可以理解为只有当传入神经元的信号强度高于阙值才会使细胞体做出相应的反应。

而在阶跃函数中,阶跃代表这里输出的结果是具有跳跃性的,于分类问题性质类似。

softmax函数:

>>> a = np.array([0.3, 2.9, 4.0])
>>>
>>> exp_a = np.exp(a) # 指数函数
>>> print(exp_a)
[  1.34985881  18.17414537  54.59815003]
>>>
>>> sum_exp_a = np.sum(exp_a) # 指数函数的和
>>> print(sum_exp_a)
74.1221542102 >>>
>>> y = exp_a / sum_exp_a
>>> print(y)
"""
		e**ak
yk =  --------   分母代表所有输入数据经此括号内运算后求和
		sum(e**ai)  
		
将上一层的原始数据进行处理,返回一个介于0.1之间的数字,通常用来标识概率问题。

"""
常用的损失函数:

均方误差损失函数:

# t 为真实值 
# y 为测试值

res = 0 
for i in range(t):
	res += (y-t)**2
return res/2
"""

"""
	

交叉熵误差损失函数:

神经网络的学习:

关于数据对于神经网络学习的重要性:

神经网络的特征就是可以从数据中学习,数据是神经网络学习的基础。

从数据中寻找答案、从数据中发现模式、根据数据讲故事……这些机器学习所做的事情,如果没有数据的话,就无从谈起。因此,数据是机器学习的核心。这种数据驱动的方法,也可以说脱离了过往以人为中心的方法。--《深度学习》

学习意味着神经网络可以根据已有数据对网络中的权重进行调整。

标签:函数,导数,损失,学习,神经网络,深度,数据,神经元
From: https://www.cnblogs.com/zonghongqi/p/18063979

相关文章

  • day01 markdown学习
    markdown学习有一个官方学习教程网站:https://markdown.com.cn文本编辑器typora或者在线markdown编辑markdown是一个轻量级标记语言,文件后缀名.md或者.markdown看下面教程的时候打开源代码模式1.标题有六个标题模式1.#+空格+文字一级标题2.##+空格+文字二级标题3.###+......
  • 读写分离 & 分库分表 & 深度分页
    什么是读写分离?见名思意,根据读写分离的名字,我们就可以知道:读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。 这样的话,就能够小幅提升写性能,大幅提升读性能。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会......
  • 编译实践学习 Part1
    本文采用CCBY协议发布。闲话开新坑辣!参考PKU的文档做的。为什么会做这个呢?之前看一位退役OIer的Blog然后发现了这个文档,想着自己退役之后也要做一个。主要是被文档最后的awesome-sysy吸引了。其实之前我在OI里也写过CYaRon!语的编译版本,所以算是有Bear来........
  • .Net 理解异步的学习
    //异步-在方法中使用//异步约等于线程asyncawait一起使用//异步只有三种返回值//1.Task//2.Task<T>//3.void几乎不适用asyncTaskGetDataAsync(){//Task不需要等待结果执行//Task.Run(()=>Console.WriteLine("一个异步的方法"));//......
  • 安卓开发学习-向上一个Activity返回数据
    发送请求页面点击查看代码packagecom.android.response;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.TextView;importandroidx.activity.result.ActivityResultLauncher;importandroidx.activity.......
  • 【Web】Web 阶段学习笔记
    Web阶段学习笔记目录Web阶段学习笔记一、前端基础(一)HTML与CSS(二)JavaScript入门一、前端基础(一)HTML与CSS1-1HTML快速入门1-2CSS入门与选择器1-3CSS字体与字体样式1-4链接、列表与表格样式1-5盒子模型点击展开剩余9项1-6浮动与弹性布局1-......
  • 安卓开发学习-Intent携带数据
    发送数据页面点击查看代码packagecom.android.messaging;importandroid.annotation.SuppressLint;importandroid.content.Intent;importandroid.os.Bundle;importandroid.widget.Button;importandroid.widget.TextView;importandroidx.appcompat.app.AppCompatA......
  • MarkDown的学习
    MarkDown学习标题:(#)+(空格)+标题名字一级标题(##)+(空格)+标题名字二级标题(###)+(空格)+标题名字三级标题最高支持到六级标题字体hello,world!(两边加两个星号变粗体)hello,world!(两边加一个星号变斜体)hello,world!(两边加三个星号变斜体加粗)hello,world!(两边加两个波浪号会在字......
  • m基于深度学习网络的花朵种类识别系统matlab仿真,包含GUI界面
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要       随着人工智能技术的飞速发展,深度学习作为其中的重要分支,在计算机视觉领域取得了显著的成果。花朵种类识别作为植物分类学的一个子领域,具有广泛的应用前景,如生态保护、园艺设计、植物教......
  • .Net 反射的学习
    //反射//一切从type开始2种拿到type的方式//作用:动态的操作对象获取属性方法特性//1.拿到对象的type//typeof(类);//2.拿到实例化之后的对象的typevaruser=newUser();user.name="zhansan";vartypes=user.GetType();//GetProperties()......