机器学习笔记之前馈神经网络(二)非线性问题

news2024/12/26 11:08:56

机器学习笔记之前馈神经网络——非线性问题

  • 引言
    • 回顾:关于非线性问题
    • 解决非线性问题的三种方式

引言

上一节介绍了从机器学习到深度学习的过渡,并介绍了深度学习的发展过程。本节将主要介绍如何使用神经网络处理非线性问题

回顾:关于非线性问题

关于非线性问题,我们并不陌生,例如在核方法思想与核函数介绍中提到的最简单的非线性问题——亦或分类问题
亦或问题描述
针对二维特征无法将亦或问题线性可分的情况,通过添加一维新特征的方法,使其在三维特征空间中实现分类:
x ( i ) = [ x 1 ( i ) , x 2 ( i ) , ( x 1 ( i ) , − x 2 ( i ) ) ] i = 1 , 2 , 3 , 4 x^{(i)} = \left[x_1^{(i)},x_2^{(i)}, \left(x_1^{(i)}, - x_2^{(i)}\right)\right] \quad i=1,2,3,4 x(i)=[x1(i),x2(i),(x1(i),x2(i))]i=1,2,3,4
对应的分类效果表示如下:
亦或分类问题——示例
虽然这个例子比较简单,但可以观测到关于非线性分类问题的处理思想——通过高维特征转换将非线性问题转化为高维线性问题。这也是核方法的主要思想。
当然,非线性问题不仅存在于分类任务中,回归任务中同样也存在非线性问题。例如介绍过的高斯过程回归,从权重空间角度观察,其核心思想就是将贝叶斯线性回归核技巧相结合:

  • 样本特征空间 X \mathcal X X经过高维特征转化得到 ϕ ( X ) \phi(\mathcal X) ϕ(X),从而引发模型参数 W \mathcal W W的高维转换;
  • 再使用贝叶斯线性回归的两步走推断
    • 求解高维转换后 W \mathcal W W后验概率分布 P ( W ∣ D a t a ) \mathcal P(\mathcal W \mid Data) P(WData)
      P ( W ∣ D a t a ) ∼ N ( μ W , Σ W ) { μ W = 1 σ 2 ( A − 1 X T Y ) Σ W = A − 1 A = [ 1 σ 2 X T X + Σ p r i o r − 1 ] \begin{aligned} \mathcal P(\mathcal W \mid Data) \sim \mathcal N(\mu_{\mathcal W},\Sigma_{\mathcal W}) \\ \begin{cases} \mu_{\mathcal W} = \frac{1}{\sigma^2}(\mathcal A^{-1} \mathcal X^T \mathcal Y) \\ \Sigma_{\mathcal W} = \mathcal A^{-1} \\ \mathcal A = \left[\frac{1}{\sigma^2} \mathcal X^T\mathcal X + \Sigma_{prior}^{-1}\right] \end{cases} \end{aligned} P(WData)N(μW,ΣW) μW=σ21(A1XTY)ΣW=A1A=[σ21XTX+Σprior1]
    • 基于 P ( W ∣ D a t a ) \mathcal P(\mathcal W \mid Data) P(WData),给定未知样本 x ^ \hat x x^,求解对应的标签信息 y ^ \hat y y^后验概率分布 P ( y ^ ∣ D a t a , x ^ ) \mathcal P(\hat y \mid Data,\hat x) P(y^Data,x^)
      P ( y ^ ∣ D a t a , x ^ ) = ∫ W ∣ D a t a P ( W ∣ D a t a ) ⋅ P ( y ^ ∣ W , D a t a , x ^ ) d W = E W ∣ D a t a [ P ( y ^ ∣ W , D a t a , x ^ ) ] ∼ N ( x ^ T μ W , x ^ T ⋅ Σ W ⋅ x ^ + σ 2 ) \begin{aligned} \mathcal P(\hat y \mid Data,\hat x) & = \int_{\mathcal W \mid Data} \mathcal P(\mathcal W \mid Data) \cdot \mathcal P(\hat y \mid \mathcal W,Data,\hat x) d\mathcal W \\ & = \mathbb E_{\mathcal W \mid Data} \left[\mathcal P(\hat y \mid \mathcal W,Data,\hat x)\right] \\ & \sim \mathcal N \left(\hat x^T \mu_{\mathcal W} ,\hat x^T \cdot \Sigma_{\mathcal W} \cdot \hat x + \sigma^2\right) \end{aligned} P(y^Data,x^)=WDataP(WData)P(y^W,Data,x^)dW=EWData[P(y^W,Data,x^)]N(x^TμW,x^TΣWx^+σ2)

解决非线性问题的三种方式

上一节介绍,马文·明斯基认为感知机算法无法解决非线性问题,从而导致后续接近10年的神经网络方向的没落。关于非线性问题,传统的解决方法存在三种:

  • 非线性转换(Non-Transformation)。其主要思想是:通过非线性转换,将原始的样本特征空间 X \mathcal X X转化为新的特征空间 Z \mathcal Z Z,转换的目标是在特征空间 Z \mathcal Z Z中将非线性问题转化为线性问题
    这里需要再次提到Cover定理:高维特征相较于低维特征更易线性可分。
    ϕ : X ⇒ Z \phi:\mathcal X \Rightarrow \mathcal Z ϕ:XZ

  • 核方法(Kernal Method):核方法本身和非线性转换方法是分不开的。根据 Cover \text{Cover} Cover定理,新的特征空间 Z \mathcal Z Z往往要高于原始的特征空间 X \mathcal X X
    非线性转换在实践过程中往往存在一些弊端

    • 非线性转换 ϕ : X ⇒ Z \phi:\mathcal X \Rightarrow \mathcal Z ϕ:XZ的过程中,本身的计算可能是极为复杂的
      新特征空间 Z \mathcal Z Z的产生需要极大的计算量。
    • 假设已经得到了新特征空间 Z \mathcal Z Z,他的维度可能是极高的,甚至是无限维。这个计算代价同样是负担不起的;
    • 同样是新特征空间 Z \mathcal Z Z的高维度,在特征维度增高的条件下,样本数量可能因维度扩张的脚步而出现维数灾难的情况发生。

    而核方法的核心在于核技巧(Kernal Trick),其核心目的在于:通过核函数(Kernal Function)替代新特征 Z \mathcal Z Z的内积运算,从而减少了大量的运算过程

    • 假设 x ( i ) , x ( j ) x^{(i)},x^{(j)} x(i),x(j)是特征空间 X \mathcal X X内的点,对应经过非线性转换得到对应点 z ( i ) , z ( j ) z^{(i)},z^{(j)} z(i),z(j)
      x ( i ) , x ( j ) ∈ X z ( i ) = ϕ ( x ( i ) ) z ( j ) = ϕ ( x ( j ) ) x^{(i)},x^{(j)} \in \mathcal X \\ z^{(i)} = \phi(x^{(i)})\quad z^{(j)} = \phi(x^{(j)}) x(i),x(j)Xz(i)=ϕ(x(i))z(j)=ϕ(x(j))
    • 构建核函数 κ ( x ( i ) , x ( j ) ) = ⟨ z ( i ) , z ( j ) ⟩ = [ ϕ ( x ( i ) ) ] T ϕ ( x ( j ) ) \kappa(x^{(i)},x^{(j)}) = \left\langle z^{(i)},z^{(j)}\right\rangle = \left[\phi(x^{(i)})\right]^T\phi(x^{(j)}) κ(x(i),x(j))=z(i),z(j)=[ϕ(x(i))]Tϕ(x(j)),如果该函数构建出来,可以通过原始特征空间直接得到转换后空间的内积结果,这种方式隐藏了非线性变换的复杂运算过程,并且也省掉了内积计算的运算过程,节省了大量运算。
      对比以下‘非线性转换’和‘核方法’,它们的本意是相同的,均是通过将低维样本空间映射到高维,从而实现非线性问题的求解。不同点在于,非线性转换‘真的做了转换’,如何转换需要人为手动设计;
      而核方法本身没有做转换,而是构建核函数,使其成为原始样本为输入,非线性转换后样本的内积作为结果。
  • 神经网络(Neural Network)。它的核心是通用逼近定理。这里依然以亦或分类问题为例:
    离散数学中,( ∧ \land ),( ∨ \vee ),( ¬ \neg ¬)三种运算被称为基本运算;而亦或运算被称为复合运算。亦或运算使用基本运算表达结果如下:
    x 1 ⊕ x 2 = ( ¬ x 1 ∧ x 2 ) ∨ ( x 1 ∧ ¬ x 2 ) x_1 \oplus x_2 = (\neg x_1 \land x_2) \vee (x_1 \land \neg x_2) x1x2=(¬x1x2)(x1¬x2)
    上述复合运算可以表示成如下步骤
    x 1 ⊕ x 2 = ( ¬ x 1 ∧ x 2 ) ⏟ s t e p − 1 ∨ ( x 1 ∧ ¬ x 2 ) ⏟ s t e p − 2 ⏟ s t e p − 3 x_1 \oplus x_2 = \underbrace{\underbrace{(\neg x_1 \land x_2)}_{step-1} \vee\underbrace{(x_1 \land \neg x_2)}_{step-2}}_{step-3} x1x2=step3 step1 (¬x1x2)step2 (x1¬x2)
    假设使用有向图的形式去描述这个过程:
    亦或运算执行过程
    这明显是一个有向无环图,并且 step-1 , step-2 , step-3 \text{step-1},\text{step-2},\text{step-3} step-1,step-2,step-3
    的主体运算均是基本运算,完全可以使用感知机算法进行线性可分。
    step-1 \text{step-1} step-1在感知机算法中的激活函数表示如下:
    step-1 = { 1 if  x 1 = 0 , x 2 = 1 0 otherwise \text{step-1} = \begin{cases} 1 \quad \text{if } x_1 = 0,x_2 = 1 \\ 0 \quad \text{otherwise} \end{cases} step-1={1if x1=0,x2=10otherwise
    同理, step-2 , step-3 \text{step-2},\text{step-3} step-2,step-3对应的激活函数分别表示为:
    step-3 \text{step-3} step-3本身就是基本运算中的‘或’运算。
    step-2 = { 1 if  x 1 = 1 , x 2 = 0 0 otherwise step-3 = { 0 if  x 1 = 0 , x 2 = 0 1 otherwise \text{step-2} = \begin{cases} 1 \quad \text{if } x_1 = 1,x_2 = 0 \\ 0 \quad \text{otherwise} \end{cases} \quad \text{step-3} = \begin{cases} 0 \quad \text{if } x_1 = 0,x_2 = 0 \\ 1 \quad \text{otherwise} \end{cases} step-2={1if x1=1,x2=00otherwisestep-3={0if x1=0,x2=01otherwise

并且从图中能够明显看出,亦或问题被表示成了一个嵌套的、复合函数。并且它的计算过程包含顺序,而这个顺序被图中的层级顺序所代替。

将上式进行归纳,构建一个神经网络,关于亦或问题表示如下:

  • x 1 , x 2 x_1,x_2 x1,x2只能取 0 , 1 0,1 0,1两种条件,而求解目标是抑或问题
    x 1 ⊕ x 2 = { 1 x 1 ≠ x 2 0 x 1 = x 2 x_1 \oplus x_2 = \begin{cases} 1 \quad x_1 \neq x_2 \\ 0 \quad x_1 = x_2 \end{cases} x1x2={1x1=x20x1=x2
  • 亦或问题分解为基本运算,并给予权重信息:包含运算的元素赋权值 − 1 -1 1;不包含运算的元素赋权值 1 1 1;偏置项统一赋值 − 0.5 -0.5 0.5。而激活函数依然使用符号函数
    sign ( a ) = { 1 if  a > 0 0 otherwise \text{sign}(a) = \begin{cases} 1 \quad \text{if } a > 0 \\ 0 \quad \text{otherwise} \end{cases} sign(a)={1if a>00otherwise
    示例:当 x 1 = 1 , x 2 = 0 x_1 =1,x_2 = 0 x1=1x2=0时,验证以下这个前馈神经网络的最终结果:
    step-1 : sign [ 1 × 1 + 0 × ( − 1 ) − 0.5 ] = 1 ( 0.5 > 0 ) step-2 : sign [ 1 × ( − 1 ) + 0 × 1 − 0.5 ] = 0 ( − 1.5 < 0 ) step-3 : sign [ 1 × 1 + 0 × 1 − 0.5 ] = 1 ( 0.5 > 0 ) \begin{aligned} \text{step-1 : }\text{sign} \left[1 \times 1 + 0 \times (-1) - 0.5\right] = 1 \quad (0.5 > 0) \\ \text{step-2 : }\text{sign} \left[1 \times (-1) + 0 \times 1 - 0.5\right] = 0 \quad (-1.5 < 0) \\ \text{step-3 : } \text{sign} \left[1 \times 1 + 0 \times 1 - 0.5\right] = 1 \quad (0.5 > 0) \end{aligned} step-1 : sign[1×1+0×(1)0.5]=1(0.5>0)step-2 : sign[1×(1)+0×10.5]=0(1.5<0)step-3 : sign[1×1+0×10.5]=1(0.5>0)
    这完全满足亦或函数的描述,那么这样的模型结构以及对应的模型参数(权值、偏置项)就可以表示亦或分类问题
    其他的情况也可以试验,这里就不多赘述了。

上述针对亦或分类问题构建了一个完整的前馈神经网络
前馈神经网络——亦或问题
该图相比于上面的计算过程存在一些差别。

  • 首先出现了一个新的结点:偏置。
  • 中间的白色点也不在表示与或非产生的运算步骤,取而代之的是包含权重信息、偏置项信息的线性运算,经过激活函数后产生的结果
    也就是说,相比于计算过程图,白色结点不再具有实际的逻辑意义,只有包含抽象意义的计算过程。

这个就是机器学习中层次化的体现。这种网络结构也称为多层感知机,名字也很朴素,就是由若干个感知机堆叠在一起产生的模型结构。也称为前馈神经网络(Feedforward Neural Network)。
从这个点也能看出,前馈神经网络依然是‘频率派’的代表模型。

  • 因为在整个模型结构的构建以及模型参数的赋予(这里的模型参数的试出来的,不是学习出来的,仅是一个简单的例子)和概率没有关联关系。
  • 并且这里的模型参数(权重信息、偏置项)被假设为一个未知的常量。而不是通过后验概率的方式进行求解。
  • 个人认为最有说服力的特征就是 h 1 , h 2 , h 3 h_1,h_2,h_3 h1,h2,h3所表示的三个结点均不是随机变量。在之前介绍的很多模型。如Sigmoid信念网络、受限玻尔兹曼机中所有的结点,无论是观测变量还是隐变量,它们均是随机变量。

因而区别于概率图,通常称层次化的神经网络图,如 MLP,CNN,RNN \text{MLP,CNN,RNN} MLP,CNN,RNN等称为计算图( Computational Graph \text{Computational Graph} Computational Graph)

相关参考:
马文·明斯基——百度百科
非线性问题的三种解决方法

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

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

相关文章

决策树生成、决策树可视化、决策树算法api、泰坦尼克号乘客生存预测案例代码

一、决策树算法api class sklearn.tree.DecisionTreeClassifier(criterion’gini’,max_depthNone,random_stateNone) criterion&#xff1a;特征选择标准&#xff0c;"gini"或者"entropy"&#xff0c;前者代表基尼系数&#xff0c;后者代表信息增益&…

来自 GitHub 2022 的趋势和见解

《Github 2022 发展趋势和见解》发布了这件事小伙伴们知道了吧&#xff1f;这是每个程序员不能错过的年度报告&#xff0c;因为里面详细介绍了语言的发展趋势和热门领域的介绍。那就让我们来看看吧 目录 编程语言 地理分布 贡献时间分配 技术发展趋势 最受欢迎的存储库 …

GoogLeNet详解

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 ✨完整代码在我的github上&#xff0c;有需要的朋友可以康康✨ https://github.com/tt-s-t/Deep-Learning.git 目录 一、GoogLeNet…

C++入门——auto、范围for、nullptr

下一篇就要类和对象了&#xff0c;剩了点零碎的知识点就浅浅水一篇把 一. auto关键字 在早期C/C中auto的含义是&#xff1a;使用auto修饰的变量&#xff0c;是具有自动存储器的局部变量&#xff0c;但遗憾的 是一直没有人去使用它&#xff0c;这是由于变量本身就具备生命周期…

算法及时间、空间复杂度

算法 算法是对问题求解过程的一种描述&#xff0c;是为解决一个或一类问题给出的一个确定的、有限长的操作序列。严格说来&#xff0c;一个算法必须满足以下5个重要特性&#xff1a; &#xff08;1&#xff09;有穷性&#xff1a;对于任意一组合法的输入值&#xff0c;在执行有…

【数据结构与算法——C语言版】5. 排序算法(2)——冒泡排序

前言 上篇文章【数据结构与算法——C语言版】4. 排序算法&#xff08;1&#xff09;——选择排序我们介绍了排序算法中的选择排序&#xff0c;其时间复杂度是O(n2)&#xff0c;本篇文章我们将介绍另一种同样时间复杂度是O(n2)的排序算法——冒牌排序&#xff0c;这两种算法思路…

ChatGPT背后的开源AI框架Ray,现在值10亿美元

Ray 被 OpenAI、亚马逊等科技公司用来开发大模型&#xff0c;是最近异军突起的框架。 最近一段时间&#xff0c;文本生成的人工智能在互联网上掀起了一阵风暴&#xff1a;ChatGPT 因为可以对人们能想到的几乎任何问题提供非常详细、近乎逼真的回答而受到追捧。大模型应用的出现…

Mapper代理开发案例及MyBatis核心

本片文章需要参考我的前一篇文章&#xff1a;MyBatis入门案例引入总结&#xff0c;使用mapper代理开发的好处就是可以解决开发中硬编码的问题和简化后期的SQL执行。使用这种方式可以不用写接口的实现类&#xff0c;免除了复杂的方法&#xff0c;使得代码更加清晰易懂按照以前的…

vue的过渡动画(有vue的动画库和ui库的介绍)

一、概念 Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。 二、默认过渡 <template><div><button click"isShow!isShow">显示/隐藏</button><transition appear><h1 v-show"isShow" cl…

过滤器和拦截器的使用及管理

参考&#xff1a;(70条消息) Spring过滤器和拦截器的区别_yjc0403的博客-CSDN博客https://www.cnblogs.com/colin220/p/9606412.htm概述过滤器&#xff1a;是在javaweb中&#xff0c;你传入的request、response提前过滤掉一些信息&#xff0c;或者提前设置一些参数&#xff0c;…

Anaconda安装之后Spyder打不开解决办法--目前有用 jupyter notebook 无法正常运行2023.1.7

纯纯小白&#xff0c;探索一天&#xff0c;终于成功&#xff0c;需要我的经历没有白费&#xff0c;让大家少走弯路。 问题描述 从官网下载Anaconda之后&#xff0c;安装&#xff0c;一切正常。打开Anaconda navigator在弹出窗口选择了更新&#xff08;我怀疑这就根源&#xf…

Js逆向教程24-作用域和自执行函数

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; Js逆向教程24-作用域和自执行函数 一、变量作用域 1.1局部变量 function jb() {var a"我是局部变量"return a; }1.2全局变…

【Java寒假打卡】Java基础-异常

【Java寒假打卡】Java基础-异常异常概述throws声明异常throw抛出异常try-catch 抛出异常throwable的成员方法异常概述 Exception:称之为异常类&#xff0c;他表示程序本身可以处理的问题 RuntimeException及其子类&#xff1a;运行时异常。&#xff08;空指针异常&#xff0c;…

JUC总结系列篇 (二) : 对线程的理解和使用总结

文章内容&#xff1a; 一.为什么需要多线程 二.线程的创建 三.线程的方法sleep(),run(),wait(),yeid(),join(),interrupt()等方法归纳总结 四.线程的状态及其转换 五.线程的交替执行案例 六.多个线程依次执行案例 七.多线程并发带来的线程安全问题 一.为什么需要多线程&#x…

Linux项目自动化构建工具-make/Makefile

一、前言 会不会写makefile&#xff0c;从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;makefile定义了一系列的规则来指定&#xff0c;哪些文件需要先编译&#xff0c;哪些文件…

前端入门笔记 04 —— Web(html CSS)布局

响应式布局 屏幕尺寸变化&#xff0c;需要响应式网页设计RWD web页面适应不同屏幕宽度因素 液态站点&#xff0c;拉伸充满浏览器窗口 小屏幕挤成一团&#xff0c;大屏幕空白间隙过大固定宽度 像素为单位固定尺寸 小屏幕滚动&#xff0c;大屏幕空白 实现 设置meta标签媒体查…

数据结构入门5-1(数和二叉树)

目录 注 树和二叉树的定义 树的定义 树的基本术语 二叉树的定义 树和二叉树的抽象数据类型定义 二叉树的性质和存储结构 二叉树的性质 二叉树的存储结构 1. 顺序存储结构 2. 链式存储结构 遍历二叉树和线索二叉树 遍历二叉树&#xff08;traversing binary tree&a…

加密与安全

目录 一、编码算法 1.1、ASCII 1.1.1、ASCII简介 1.1.2、ASCII产生原因 1.1.3、表达方式 1.1.4、标准表 1.1.5、大小规则 1.2、Unicode 1.2.1简介 1.2.2编码和实现 1.3、汉字编码 1.3.1、GB2312-80 标准 1.3.2、GBK 编码标准 1.3.3、GB18030编码标准 1.4、URL编…

【Node】中Express框架连接Mysql实现用户注册接口

Node.js中Express框架连接Mysql实现用户注册接口 处理用户注册接口简单分为三步&#xff1a; 1、注册校验 2、完善逻辑 3、拆分模块 拆分模块能够使部分功能能够复用&#xff0c;封装好各个模块使得模块间只能通过有限的接口互相访问&#xff0c;从而降低耦合&#xff0c;拆分模…

LeetCode[1046]最后一块石头的重量

难度&#xff1a;简单 题目&#xff1a; 有一堆石头&#xff0c;每块石头的重量都是正整数。每一回合&#xff0c;从中选出两块最重的 石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a;如果 x …