神经网络(深度学习,计算机视觉,得分函数,损失函数,前向传播,反向传播,激活函数)

news2024/9/20 11:00:34

目录

 一、神经网络简介

二、深度学习要解决的问题 

三、深度学习的应用

四、计算机视觉

五、计算机视觉面临的挑战

 六、得分函数

七、损失函数

八、前向传播

九、反向传播

十、神经元的个数对结果的影响

十一、正则化与激活函数


 一、神经网络简介

        神经网络是一种有监督的机器学习算法,神经网络当成一种特征提取的方法,神经网络追求是什么样的的权重参数适合当前任务。        

二、深度学习要解决的问题 

        机器学习流程:数据获取,特征工程,建立模型,评估与应用。最重要的是特征工程,前面学了那么多算法,归根到底,模型都是根据特征来进行训练。

        特征工程的作用:

                数据特征决定了模型的上限。

                预处理和特征提取是最核心的。

                算法和参数决定了如何去逼近这个上限。

        机器学习问题:人工选择数据,人工选择特征,人工选择算法,人工选择结果。(说白了就是实现了数学公式)

        深度学习,神经网络:解决了特征工程的问题

         对于文本,图像数据去提取特征难,放在深度学习,神经网络里,就很好解决。

        可以把深度学习,神经网络当作一个黑盒子,它能自动的去提取特征(它认为的最合适的特特征)它是真正有学习过程的,它可以真正的去学习什么样的特征是最合适的,有了特征,当成输入+线性回归、逻辑回归、SVM等等都行。

三、深度学习的应用

        最常见、最广泛的应用是计算机视觉(人脸识别等)、自然语言处理(ChatGpt)。

        那么是否也存在缺点呢?看如下图

        

        随着数据规模的提升,计算量太大,参数多,速度慢,比如手机端人脸识别,会出现识别延时的现象。

        提一下数据生成:对于庞大的训练数据,数值数据可以采用一些数学工具包生成,对于图像数据可以对图像进行翻转、镜面变换、平移等等,容易得到。

四、计算机视觉

                最经典的图像分类任务。我们看看在计算机里图像是怎么表示的吧。

        例如:一张300*100*3的猫咪图像 300:High 100:wight 3:三个颜色通道RGB

 它是由一个一个像素点组成的,每个像素点的值0~255,值越大颜色越浅。它被表示为三维数组的形式。

        用数值形式表示如:

\begin{bmatrix} R & G &B \\ .& .& .\\ .& .& .\\ . & . & . \end{bmatrix}

五、计算机视觉面临的挑战

        拍摄图像有照射角度,形状改变,部分遮蔽,背景混入的现象。

        机器学习的常规套路:

                收集数据并给定标签

                训练一个分类器

                测试评估

        我们用KNN算法来做图像分类任务

        K近邻算法:算法流程

                1. 计算以知类别数据集中的所有点与当前的距离

                2. 按照距离依次排序

                3. 选取与前点距离最小的K个点

                4. 确定前K个点所在类别的概率

                5. 返回前K个点出现的频率最高的类别作为当前点预测分类

        数据集:CIFAR-10数据库,10类标签,5000个训练数据,10000个测试数据,大小为32*32*3

        用KNN来进行图像分类

                距离的选择:L1 distance : d1(I_1,I_2)=\sum_p\left | I_1^p-I_2^p \right |(像素点对应相减)

                图像距离计算方式:

                一个栗子:

                测试结果:部分还可以,没有分类对的图像,问题出现在哪里???

                为什么K近邻算法不能用图像分类:

                        我们关注的是主体(主要成分),而背景主导是一个最大的问题,那么如何才能让机器学习到那些是重要的成分呢?

 六、得分函数

                线性函数(得分函数)

                从输入-->输出的映射

                

七、损失函数

        假设分三类:cat,dog,ship

        计算方法:

                 

        决策边界,多维数据,多组权重参数构成了决策边界

        如何衡量分类结果呢?

                上图所示:结果的得分值有着明显的差异,我们需要明确的指导模型表示当前效果有多好或是有多坏!!!

               引入损失函数L_i=\sum_{j\neq y_i}max(0,s_j-s_{y_i}+1)

                其中:s_j表示错误类别得分,s_{y_i}表示正确类别的得分,1表示容忍程度,即正确类别的得分至少比错误类别高1

        例如有三个测试样本:

正确类别
预测类别得分(样本1)猫(样本2)车(样本3)蛙
cat3.21.32.2
car5.14.92.5
frog-1.72.0-3.1

                 则损失值:

                        L_1 = max(0,5.1-3.2+1)+max(0,-1.7-3.2+1)=2.9

                        同理:L_2=0,L_3=10.9

                由损失值可以看出样本2是分类正确的

                

        如果损失函数的值相同,那么意味着两个模型一样吗??

        假设:

        f(x,w)=Wx,L=\frac{1}{N}\sum_{i=1}^{N}max(0,f(x_i;w)_j-f(x_i;w)y_i+1)

        输入数据:x=[1,1,1,1]

        模型A:w_1=[1,0,0,0]

        模型B:w_2=[0.25,0.25,0.25,0.25]

        得到:w_1^Tx=w_2^Tx=1,L_1=L_2

        一样吗??显然是不一样的,可以看出来模型A只是利用了第一个参数,而模型B均等利用4个参数,B显然更好,那么怎么去区分这两个模型呢??或者说怎么去让模型A变得平滑,让它不那么极端呢??

        答案是正则化。即加入正则化惩罚项。

        即:L=\frac{1}{N}\sum_{i=1}^{N}max(0,f(x_i;w)_j-f(x_i;w)y_i+1)+\lambda R(w)

        正则化惩罚项:R(w)=\sum_k\sum_lw_{k,l}^2

        目的:神经网络过于强大,几乎90%的神经网络都会过拟合,不要让它太复杂,过拟合的模型是没用的。

        softmax分类器

                现在啊,我们得到是一个输入的得分值,损失函数也是基于得分值的损失。但是直接给我们一个概率值岂不是更好!!!那么如何把一个得分值转化成一个概率值呢?

        即sigmoid函数:

           归一化:p(Y=k/x=x_i)=\frac{e^{ij}}{\sum e^{ij}} \, where \,s=f(x_i,w)

            计算损失值:L_i =-logp(Y=y_i|x=x_i)

                

cat3.2

---->

exp

24.5

--------->

normalize

0.13
car5.1164.00.87
frog-1.70.180.00
得分放大归一化概率

                loss: l_i=-log(0.13)=0.87

八、前向传播

        前向传播:一步一步的往前走,得到概率值,损失值

        

        前向传播很好理解。

        经过前向传播得到是损失值,但是怎么更新(参数,权重)模型呢??

        这就交给反向传播了。

九、反向传播

        经过前面的学习我们知道在做线性回归时,我们让目标函数

J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{i})^2

        即损失函数最小化

        经过求解梯度,更新参数theta

          \frac{\partial J}{\partial \theta_i}=-\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_i^j

        \theta_j'=\theta_j+\frac{1}{m}\sum_{i=1}^{m}(h_{\theta}(x^{i})-y^{i})x_i^j

        那么放在神经网络也是用梯度下降的方法,具体是怎么样实现的呢?

        举一个例子:

                

                f(x,y,z)=(x+y)z

let \, q=x+y \, \vdots \, \frac{\partial q}{\partial x}=1\, \frac{\partial q}{\partial y}=1

f=qz\, \vdots\frac{\partial f}{\partial q}=z\, \, \frac{\partial q}{\partial z}=q

want:\frac{\partial f}{\partial x},\frac{\partial f}{\partial y},\frac{\partial f}{\partial z}

\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\cdot \frac{\partial q}{\partial y}=z

        如上所示:计算梯度需要逐层计算(链式法则)

        可以一个一个计算,也可以一大块一大块计算

十、神经网络架构细节

        层次结构:4层

        神经元:9

        全连接:每一层都与下一层全部连接

        我们看到中间的箭头,实际是有箭头的吗???哈哈哈哈,并不是,中间就是权重参数矩阵,输入层输入两个特征,经过W1矩阵变换到5个特征,怎么变得呢??黑盒子!!!然后经过W2变换成4个特征,最后输出。

        非线性变化:之前我们提到过神经网络是一层一层的,那么:

[(x_1w_1)w_2]w_3 \neq xw_1w_2w_3

        为啥呢??即在每一层后面都加有非线性变换,可以联想到之前的将得分值转化为概率值与之类似。

        其基本结构:f=w_2Rule(w,x)

        继续堆叠一层: f=w_3Rule(w_2Rule(w,x))

        神经网络的强大之处在于,用更多的参数来拟合复杂的数据

        参数多到百万级都是小儿科,但是参数越多越好吗??

十、神经元的个数对结果的影响

        并不是哦!!!过满则亏。

        大家想一下,增加一个一个神经元九就了一组参数。

        还是那句话,神经网络非常容易过拟合!!!!!!

十一、正则化与激活函数

        正则化的作用:

                惩罚力度对结果影响

                防止过拟合

        激活函数:

                非常重要的一部分

                常用的激活函数(Sigmoid,Relu,Tanh)非线性变换(把得分值转换为概率值)

                   

        激活函数的对比

        sigmoid:

         

        我们看到当数值偏大的时候,比如x=6时,求导后值几乎为零,梯度消失,如果向后传播, 对后面的影响几乎没有,所以这是存在限制的。

        当今更多使用Relu这个激活函数:

        

        求导值不变。

十二、神经网络解决过拟合的方法

        数据预处理,标准化

        参数初始化,通常我们都使用随机策略来进行参数初始化

        正则化

        DROP—OUT(自损八百)

                思想:让效果消弱

                

         即在某次正反向传播中,每一层随机杀死一部分神经元,不让参与。相当于一个比例:30%,每次让30%的神经元不参与训练。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安卓findViewById 的优化方案:ViewBinding与ButterKnife(一)

好多小伙伴现在还用findViewById来获取控件的id, 在这里提供俩种替代方案:ViewBinding与ButterKnife; 先来说说ButterKnife ButterKnife ButterKnife是一个专注于Android系统的View注入框架,在过去的项目中总是需要很多的findViewById来查…

【C语言】结构体内存对齐问题

1.结构体内存对齐 我们已经基本掌握了结构体的使用了。那我们现在必须得知道结构体在内存中是如何存储的?内存是如何分配的?所以我们得知道如何计算结构体的大小?这就引出了我们今天所要探讨的内容:结构体内存对齐。 1.1 对齐规…

绝地求生:七周年活动来袭,小黑盒联名限时返场

就在2024.3.20号下午18点,小黑盒绝地求生板块上线最新活动,活动方法和以往一样采用积分抽奖的方式,通过每日签到,完成任务即可获得相应积分,抽奖需消耗10积分,第一天可以抽8次,后面每一天可以抽…

利用colab部署chatglm

登录colab 创建新的notebook 选择notebook设置 选择GPU然后保存,需要选择GPU 克隆代码 !git clone https://github.com/THUDM/ChatGLM-6B.git切换到目录安装所需要的依赖 %cd /content/ChatGLM-6B %pwd !pip install -r requirements.txt安装所需要的依赖包 …

微软聘请了谷歌DeepMind的联合创始人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

爬虫基础:Web网页基础

爬虫基础:Web网页基础 前言Web网页基础网页的组成网页的结构节点树及节点间的关系选择器 前言 用浏览器访问不同的网站时,呈现的页面各不相同,你有没有想过为何会这样呢?了解一下网页的组成、结构和节点等内容。了解这些内容有助于…

超长爬电结构法蓝底板平面(厚膜、无感设计)中功率电阻

灌封胶封装设计 厚膜无感电阻规格书 EAK特殊设计的模压灌封胶结构设计,使本产品具备超长的 爬电距离,符合VDE0160和UL94-V0的标准。 技术特点 底板中心温度≤85C时,单一电阻结构额定 功率为150W。 四种封装结构,最多封装三个电阻。 2-…

【ChatGLM3-6B】本地大模型使用方法详细教程!!!内含详细的代码解析!!

ChatGLM3介绍 ChatGLM3 是智谱AI与清华大学KEG实验室联合发布的新一代对话预训练模型。 ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,Ch…

写一个简单的 C++ 日志库 - cllogger(3)- CRT

通过上一篇 《写一个简单的 C 日志库 - cllogger(2)- 日期时间》我们已经掌握了如何通过 std::chrono 提供的日期时间工具转换时间参数为指定格式的字符串。 现在我们可以把各个参数信息拼装为 Entry 实例,交给 OutputMessage() void cllog…

PyTorch 深度学习(GPT 重译)(三)

六、使用神经网络拟合数据 本章内容包括 与线性模型相比,非线性激活函数是关键区别 使用 PyTorch 的nn模块 使用神经网络解决线性拟合问题 到目前为止,我们已经仔细研究了线性模型如何学习以及如何在 PyTorch 中实现这一点。我们专注于一个非常简单…

python爬虫学习第二天----类型转换

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

Word2vec学习笔记

(1)NNLM模型(神经网络语言模型) 语言模型是一个单纯的、统一的、抽象的形式系统,语言客观事实经过语言模型的描述,比较适合于电子计算机进行自动处理,因而语言模型对于自然语言的信息处理具有重…

Python基础入门 --- 6.数据容器

文章目录 Python基础入门第六章:6.数据容器6.1 列表6.1.1 列表下标索引6.1.2 列表常用操作查找指定某元素的下标修改指定位置的元素值插入元素追加元素方式1追加元素方式2删除元素删除某元素在列表中的第一个匹配项清空列表统计某元素在列表中的数量统计列表元素个数…

【Redis】Redis常见原理和数据结构

Redis 什么是redis redis是一款基于内存的k-v数据结构的非关系型数据库,读写速度非常快,常用于缓存,消息队列、分布式锁等场景。 redis的数据类型 string:字符串 缓存对象,分布式ID,token,se…

RAGGED: Towards Informed Design of Retrieval Augmented Generation Systems阅读笔记

论文链接:https://arxiv.org/abs/2403.09040 Github链接:GitHub - neulab/ragged: Retrieval Augmented Generation Generalized Evaluation Dataset 最近RAG(retrieval-augmented generation)真的好火,这不CMU的发了…

vscode用SSH远程开发c语言

vscode配置远程 这里我使用虚拟机进行展示,首先需要你的虚拟机安装好ssh 没安装好就执行下面的命令安装并开启服务 sudo apt-get install ssh sudo service ssh start ps -e | grep sshvscode安装 remote-ssh扩展 点击左下角的远程连接,我这里已经连接…

电脑小白入门|Windows系统下只要记住这几点,你就能流畅使用!

前言 前段时间发现有很多小伙伴在使用电脑这个问题上遇到了很大的难题:到底什么时候该用鼠标左键单击、什么时候该双击;电脑的快捷键那么多怎么记得住等等的问题。 今天小白就稍微来讲解一下,这个帖子适合Windows电脑都不会使用的小伙伴。 …

流畅的 Python 第二版(GPT 重译)(四)

第二部分:函数作为对象 第七章:函数作为一等对象 我从未认为 Python 受到函数式语言的重大影响,无论人们说什么或想什么。我更熟悉命令式语言,如 C 和 Algol 68,尽管我将函数作为一等对象,但我并不认为 Py…

iframe动态操作标签分享

前言 分享一个近期工作中遇到的关于IFrame的需求,以及解决方案。 需求大致是说在我们系统中嵌套了另一个文档页面,这个文档页面是爬取的,并且页面是原先使用后端渲染实现的,取到的css和script标签都是相对路径比如: "./mia…

【文件操作和IO】

文件操作和IO 1.文件2. 硬盘上文件的目录结构3. 文件路径4. 文件重要分类:5. Java中操作文件5.1 Java对于文件操作的API5.2 Java中使用File类来进行文件操作5.3 File类属性5.4 构造方法5.5 方法: 6. 文件内容的读写 -- 文件流(数据流&#xf…