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


    目录

     一、神经网络简介

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

    三、深度学习的应用

    四、计算机视觉

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

    六、得分函数

    七、损失函数

    八、前向传播

    九、反向传播

    十、神经网络架构细节

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

    十二、正则化与激活函数

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


     一、神经网络简介

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

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

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

            特征工程的作用:

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

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

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

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

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

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

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

                     则损失值:

                            " role="presentation">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%的神经元不参与训练。

  • 相关阅读:
    [JavaWeb学习] Spring Ioc和DI概念思想
    极客笔记你这个偷人家文章的贼
    Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包
    史上最全MySQL剖析:优化+存储+查询+索引+复制+可扩展+高可用
    [maven] 实现&使用 plugin 及 properties 简述
    linux——(5 部分软件安装)
    stm32外部时钟为12MHZ,修改代码适配
    [图文教程]如何不买苹果电脑来体验类Unix的感觉呢?Linux装机初体验,manjaro笔记本电脑,爆改Windows笔记本
    YAML 快速上手
    scale自适应分辨率 实现缩放自适应(vue3)
  • 原文地址:https://blog.csdn.net/JamesSwifte/article/details/136848838