当前位置:   article > 正文

什么是深度学习?最易懂的机器学习入门文章_mp模型的权重和阈值是人为给的

mp模型的权重和阈值是人为给的

1. 什么是深度学习?

深度学习是机器学习领域中一个新的研究方向,它被引入机器学习使其更接近于人工智能。

原文:【科普&实践】超详细!一文带你玩转深度学习 - 飞桨AI Studio星河社区

  • 深度学习是机器学习领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能。 深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。 深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
  • 深度学习在搜索技术,数据挖掘,机器学习,机器翻译,自然语言处理,多媒体学习,语音,推荐和个性化技术,以及其他相关领域都取得了很多成果。深度学习使机器模仿视听和思考等人类的活动,解决了很多复杂的模式识别难题,使得人工智能相关技术取得了很大进步。

1.1 人工智能、机器学习和深度学习的关系

人工智能是一个最宽泛的概念,是一个研究领域,同时也是一个实现目标,而机器学习则是实现这一目标的一类方法。深度学习只是机器学习这一类方法中的一种。

  • 进一步说,由于人工智能这个最宽泛的概念只阐述了目标,而没有限定方法,因此实现人工智能存在的诸多方法和分支。机器学习是当前比较有效的一种实现人工智能的方式。深度学习是机器学习算法中最热门的一个分支,近些年取得了显著的进展,并替代了大多数传统机器学习算法。
  • 如上图所示,传统机器学习算术依赖人工设计特征,并进行特征提取,而深度学习方法不需要人工,而是依赖算法自动提取特征。深度学习模仿人类大脑的运行方式,从经验中学习获取知识。这也是深度学习被看做黑盒子,可解释性差的原因。

1.2 深度学习的发展历程

早期的浅层结构(如支持向量机、逻辑回归等)在涉及到一些复杂的问题,如语音、图像、视觉等问题时,会造成维度灾难。

  • 我们都知道,一种新的概念的出现必然是为了解决某种问题或者验证某种结论,那深度学习这一新概念的提出是为了解决什么问题的呢?
  • 由于早期绝大多数机器学习与信号处理技术都使用浅层结构(如支持向量机、逻辑回归等),在解决大多数简单问题或者有限制条件的问题上效果明显。

  • 但是涉及到一些复杂的问题,如语音、图像、视觉等问题时,数据的维度会很高,也就是我们通常所说的维数灾难,这会导致很多机器学习问题会变得相当困难。各位学者又是如何去解决这一问题的呢?

  • 为何神经网络到2010年后才焕发生机呢?这与深度学习成功所依赖的先决条件:大数据涌现、硬件发展和算法优化有关。由于神经网络和深度学习是非常强大的模型,需要足够量级的训练数据,而大数据就是神经网络发展的有效前提,但很多场景下没有足够的标记数据来支撑深度学习。其实深度学习的能力特别像科学家阿基米德的豪言壮语:“给我一根足够长的杠杆,我能撬动地球!”,深度学习也可以发出类似的豪言:“给我足够多的数据,我能够学习任何复杂的关系”。但在现实中,足够长的杠杆与足够多的数据一样,往往只能是一种美好的愿景。直到近些年,各行业IT化程度提高,累积的数据量爆发式地增长,才使得应用深度学习模型成为可能。此外,还需要依靠硬件的发展和算法的优化。现阶段,依靠更强大的计算机、GPU、AutoEncoder、预训练和并行计算等技术,深度学习在模型训练上的困难已经被逐渐克服。其中,数据量和硬件是更主要的原因。

1.3 深度学习的前景

以深度学习为基础的人工智能技术,在升级改造众多的传统行业领域,存在极其广阔的应用场景。

  • 以深度学习为基础的人工智能技术,在升级改造众多的传统行业领域,存在极其广阔的应用场景。艾瑞咨询的研究报告提到,人工智能技术不仅可在众多行业中落地应用(广度),同时,在部分行业(如安防、遥感、互联网、金融、工业等)已经实现了市场化变现和高速增长(深度),为社会贡献了巨大的经济价值。其实,以深度学习为基础的AI技术在各行业已经得到了广泛的应用:以计算机视觉的行业应用分布为例,根据互联网数据中心的数据统计和预测,随着人工智能向各个行业的渗透,当前较多运用人工智能的互联网行业的产值占比反而会逐渐变小。

深度学习改变了很多领域算法的实现模式。

  • 深度学习改变了很多领域算法的实现模式。在深度学习兴起之前,很多领域建模的思路是投入大量精力做特征工程,将专家对某个领域的“人工理解”沉淀成特征表达,然后使用简单模型完成任务(如分类或回归)。而在数据充足的情况下,深度学习模型可以实现端到端的学习,即不需要专门做特征工程,将原始的特征输入模型中,模型可如图所示,同时完成特征提取和分类任务。

深度学习还推动人工智能进入了工业大生产阶段,算法的通用性促使标准化、自动化和模块化的框架产生。

  • 除了应用广泛的特点外,深度学习还推动人工智能进入了工业大生产阶段,算法的通用性促使标准化、自动化和模块化的框架产生。 在深度学习出现之前,不同流派的机器学习算法理论和实现有所不同,这就导致每个算法均要独立实现,如随机森林和支撑向量机(SVM)。但在深度学习框架下,不同模型的算法结构具有较大的通用性,如常用于计算机视觉的卷积神经网络模型(CNN)和常用于自然语言处理的长期短期记忆模型(LSTM),都可以分为组网模块、梯度下降的优化模块和预测模块等。 这就使得抽象出统一的框架成为了可能,就能大大降低编写建模代码的成本。因此,一些相对通用的模块,如网络基础算子的实现、各种优化算法等都可以由框架实现。建模者只需要关注数据处理,配置组网的方式,并能够用少量代码串起训练和预测的流程即可。

  • 在深度学习框架出现之前,机器学习工程师处于“手工作坊”生产的时代。为了完成建模,工程师需要储备大量的数学知识,并为特征工程工作积累大量行业知识。每个模型是极其个性化的,建模者如同手工业者一样,将自己的积累形成模型的“个性化签名”。而今,“深度学习工程师”进入了工业化大生产时代,只要掌握深度学习必要但少量的理论知识,掌握Python编程,即可在深度学习框架上实现非常有效的模型,甚至与该领域最领先的模型不相上下。建模领域的技术壁垒面临着颠覆,这同时也是新入行者的机遇。

2. 神经网络 —— 模拟人脑的计算方式

神经网络能够反映人类大脑的行为,允许计算机程序识别模式,以及解决人工智能、机器学习和深度学习领域的常见问题。

  • 人类发明的灵感来源有很多都是来自大自然,神经网络同样如此。人工神经网络是一种类似于人类神经网络的信息处理技术。但事实上,神经网络有很多种,虽然他们都统称为“神经网络”,但每种神经网络都各有其内部的机制与原理以及不同的神经网络采用不同的网络模型和学习机制。
  • 神经网络反映人类大脑的行为,允许计算机程序识别模式,以及解决人工智能、机器学习和深度学习领域的常见问题。

2.1 生物神经网络的基本原理

在生物神经网络中,每个神经元与其他神经元通过突触进行连接。

  • 人,无疑是有智能的。如果想让“人造物”具备智能,模仿人类是最朴素不过的方法论了。自然地,人们同样期望研究生物大脑的神经网络,然后效仿之,从而获得智能。人工神经网络(Artificial Neural Network, ANN)便是其中的研究成果之一。而人工神经网络的性能好坏,高度依赖于神经系统的复杂程度,它通过调整内部大量“简单单元”之间的互连权重达到处理信息的目的,并具有自学习和自适应的能力。
  • 而上述定义中的“简单单元”,就是神经网络中的最基本元素——神经元(Neuron)模型。如图所示,在生物神经网络中,每个神经元与其他神经元通过突触进行连接,神经元在工作的过程中,其他神经元的信号(输入信号)通过树突传递到细胞体(也就是神经元本体)中,细胞体把从其他多个神经元传递进来的输入信号进行合并加工,然后再通过轴突前端的突触传递给别的神经元。

神经元之间的信息传递,属于化学物质的传递。

  • 神经元之间的信息传递,属于化学物质的传递。当神经元“兴奋”时,就会向与它相连的神经元发送化学物质(神经递质,Neurotransmitter),从而改变这些神经元的电位。如果某些神经元的电位超过了一个阈值,相当于达到了阈值函数器的阈值,那么它就会被“激活”,在也就是“兴奋”起来,接着向其他神经元发送化学物质,一层接着一层传播。

2.2 M-P神经元模型

2.2.1 基本概念

M-P神经元模型实际上是对单个神经元的一种建模。

  • 在这一模型中,神经元接收来自各个其他神经元传递过来的输入信号。这些信号的表达,通常通过神经元之间连接的权重(Weight)大小来表示,神经元将接收到的输入值按照某种权重叠加起来,叠加起来的刺激强度,可如图用公式表示
  • 从公式可以看出,当前神经元按照某种“轻重有别”的方式,汇集了所有其他外联神经元的输入,并将其作为一个结果输出。但这种输出,并非直接输出,而是与当前神经元的阈值进行比较,然后通过激活函数(Activation Function)向外表达输出,在概念上这就叫感知机(Perceptron),其模型可用一下公式二来表示: 在这里, 就是所谓的“阈值(Threshold)”, 就是激活函数, 就是最终的输出。可以看出M-P模型就是一个加权求和再激活的过程,能够完成线性可分的分类问题。

2.2.2 代码实现

以经典乳腺癌为例

In [18]

  1. #导入需要的包
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. import sklearn.datasets
  6. from sklearn.metrics import accuracy_score #以准确率为评价指标
  7. from sklearn.model_selection import train_test_split #用来分割数据集
  8. #导入数据集
  9. from sklearn.datasets import load_breast_cancer
  10. #分离特征和标签
  11. # 1表示良性,0表示恶性
  12. breast_cancer = sklearn.datasets.load_breast_cancer()
  13. data = pd.DataFrame(breast_cancer.data,columns=breast_cancer.feature_names)
  14. data['class'] = breast_cancer.target
  15. data['class'].value_counts()
  16. X = data.drop('class',axis=1)
  17. y = data['class']
  18. #数据集划分
  19. #划分数据集和测试集,测试集的大小为总体数据的15%。设置stratify=y
  20. #按照数据集中y的比例分配给train和test,使得train和test中各类别数据的比例与原数据集的比例一致。通常在数据集的分类分布不平衡的情况下会用到stratify。
  21. X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.15, stratify=y, random_state=0)
  22. #M—P神经元模型仅能把01作为输入,所以我们要把数据进行处理,划分为01两类。
  23. X_binarise_train =X_train.apply(pd.cut, bins=2, labels=[1,0])
  24. X_binarise_test = X_test.apply(pd.cut, bins=2, labels=[1,0])
  25. #获取value,用数组进行计算
  26. X_binarise_train = X_binarise_train.values
  27. X_binarise_test = X_binarise_test.values
  28. #构建M-P神经元类
  29. class MPNeuron:
  30. def __init__(self):
  31. self.b = None
  32. def model(self,x):
  33. return (sum(x) >= self.b)
  34. def predict(self,X):
  35. y = []
  36. for x in X:
  37. y.append(self.model(x))
  38. return np.array(y)
  39. def fit(self,X,y):
  40. accuracy = {}
  41. for b in range(X.shape[1] + 1):
  42. self.b = b
  43. y_pred = self.predict(X)
  44. accuracy[b] = accuracy_score(y_pred,y)
  45. best_b = max(accuracy, key = accuracy.get)
  46. self.b = best_b
  47. #打印最佳b值和最高准确率
  48. print('best_b:', best_b)
  49. print('best_accuracy:', accuracy[best_b])
  50. #用M-P神经元训练,机器学习叫作fit,深度学习叫作train
  51. mp_neuron = MPNeuron()
  52. mp_neuron.fit(X_binarise_train,y_train)
  53. #打印accuracy_score
  54. w = mp_neuron.predict(X_binarise_test)
  55. accuracy_score(w,y_test)

2.3 激活函数

2.3.1 基本概念

阶跃函数 — 可以将神经元输入值与阈值的差值映射为输出值1或0.若差值大于等于零则输出1,对应兴奋;若差值小于零则输出0,对应抑制。

  • 前面提到了,神经元的工作模型存在“激活(1)”和“抑制(0)”两种状态的跳变,那么理想的激活函数就应该是图中所示的阶跃函数(Step Function,阶跃函数是一种特殊的连续时间函数,是一个从0跳变到1的过程,属于奇异函数)。阶跃函数可以将神经元输入值与阈值的差值映射为输出值1或0;若差值大于等于零则输出1,对应兴奋;若差值小于零则输出0,对应抑制。
  • 但事实上,在实际使用中,阶跃函数具有不光滑、不连续等众多不“友好”的特性,使用的并不广泛。说它“不友好”的原因是,在神经网络中训练网络权重时,通常依赖对某个权重求偏导、寻极值,而不光滑、不连续等通常意昧着该函数无法“连续可导”。

S型函数(sigmoid函数)— 无论输入值的范围有多大,这个函数都可以将输出挤压在范围(0,1)之内。

  • 因此,我们通常用S型函数函数来代替阶跃函数,最常用的S型函数为sigmoid函数,如图中所示。在sigmoid函数中,无论输入值 的范围有多大,这个函数都可以将输出挤压在范围(0,1)之内,因此此这个函数又被称为“挤压函数(Squashing Function)”。这样,如果输入的值在(0,0.5)之间,那么对于Sigmoid函数,则输出大于0.5小于1,对应兴奋;如果输入值在(-0.5,0)之间,那么输出则小于0.5大于0,对应抑制。
  • 既然如此,我们又应该怎样理解激活函数呢?其实从生活中就可以找到相似的影子。比如有一个父亲为了奖励他的孩子,对他说如果下次期末总成绩90分以上就奖励100元,不到90分就没有奖励。现在我们把这一过程抽象为一个M-P神经元模型。父亲最终会有两个状态,一个是奖励100元(激活),一个是没有奖励(抑制)。输入的 、 、到 等因素为孩子的表现,比如 代表孩子今天有没有认真听课, 代表孩子有没有认真完成作业, 代表孩子考试有没有认真计算。这些表现因素乘以各自的权重相加就是孩子的期末总成绩,如果总成绩没有超过父亲奖励的阈值,则最终相减的结果小于0,经过阶跃激活函数后值为0,代表父亲处于抑制状态,也就是没有奖励。但在第二次,孩子学习更加刻苦,考试过程中也特别认真,最后乘以各因素权重后的和超过了父亲的奖励阈值,即超过了90分,则最终相减的结果大于0,此时经过阶跃激活函数后的值为1,代表父亲处于激活状态,于是奖励给了孩子100元。 这便是激活函数以及整个M-P神经元模型的基本原理。

2.3.2 代码实现

阶跃函数

In [2]

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. def step_function(x):
  4. return np.where(x >= 0, 1, 0) # 如果输入值大于等于0,则输出1,否则输出0
  5. x = np.linspace(-2, 2, 1000) # 创建一个从-22的等差数列,包含1000个元素
  6. y = step_function(x)
  7. plt.figure(figsize=(8, 6)) # 创建一个8x6大小的新图形
  8. plt.plot(x, y)
  9. plt.title('Step Function')
  10. plt.xlabel('x')
  11. plt.ylabel('y')
  12. plt.grid(True) # 添加网格线
  13. plt.axis('on') #显示坐标轴
  14. plt.show()

<Figure size 800x600 with 1 Axes>

S型函数

In [16]

  1. # 导入numpy库,用于进行数学计算
  2. import numpy as np
  3. # 导入matplotlib库,用于绘制图形
  4. import matplotlib.pyplot as plt
  5. # 定义sigmoid函数,接受一个参数x
  6. def sigmoid(x):
  7. # 返回1 / (1 + np.exp(-x))的结果,np.exp(-x)计算e的-x次方
  8. return 1 / (1 + np.exp(-x))
  9. # 使用numpy的linspace函数在-1010之间创建一个等间距的点集,结果存储在x中
  10. x = np.linspace(-10, 10, 1000)
  11. # 计算每个点的sigmoid值并存储在y中
  12. y = sigmoid(x)
  13. # 使用matplotlib的plot函数将这个函数绘制出来
  14. plt.plot(x, y)
  15. # 设置图形的标题为"Sigmoid Function"
  16. plt.title("Sigmoid Function")
  17. # 设置x轴的标签为"x"
  18. plt.xlabel("x")
  19. # 设置y轴的标签为"y"
  20. plt.ylabel("y")
  21. # 添加网格线
  22. plt.grid(True)
  23. # 显示图像
  24. plt.show()

<Figure size 640x480 with 1 Axes>

3. 感知机

感知机是一种判别模型,其目标是求得一个能够将数据集中的正实例点和负实例点完全分开的分离超平面。

  • 感知机在1957年由弗兰克·罗森布拉特提出,是支持向量机和神经网络的基础。
  • 感知机是一种二类分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,正类取1,负类取-1。
  • 感知机是一种判别模型,其目标是求得一个能够将数据集中的正实例点和负实例点完全分开的分离超平面。如果数据不是线性可分的,则最后无法获得分离超平面。

3.1 单层感知机及其基本原理

基本结构 — 由两层神经元构成的网络结构。

  • 上面所讲到的M-P神经元模型其实就是对单个神经元的一种建模,需要注意的一点是,M-P模型的权重和阈值都是人为给定的,所以对这一类模型不存在“学习”的说法。其实,这也是M-P模型与单层感知机最大的区别,感知机中引入了学习的概念,权重和阈值是通过学习得来的。

  • 单层感知机模型是由美国科学家Frank Rosenblatt(罗森布拉特)在1957年提出的,它的基本结构如图所示,简单来说,感知机(Perceptron)就是一个由两层神经元构成的网络结构:输入层接收外界的输入信号,通过激活函数(阈值)变换,把信号传送至输出层,因此它也被称为“阈值逻辑单元”;输出层(也被称为是感知机的功能层)就是M-P神经元。

  • 输出的数学表达式如图所示。可以看到,大于阈值的时候输出为1,小于等于阈值的时候输出为0。

通过区分香蕉和西瓜的经典案例来看看感知机是如何工作的。

  • 如图所示。为了简单起见,我们假设西瓜和香蕉由且仅有两个特征:形状和颜色,其他特征暂不考虑。这两个特征都是基于视觉刺激而最易得到的。假设特征 代表输入颜色,特征 代表形状,权重 和 的默认值暂且都设为1。为了进一步简化,我们把阈值 (也有教程称之为偏置—bias)设置为0。为了标识方便,我们将感知机输出数字化,若输出为“1”,代表判定为“西瓜”;若输出为“0”,代表判定为“香蕉”。

  • 这样一来,可以很容易根据感知机输出 数学表达式,如下式所示,对西瓜和香蕉做出鉴定: 西瓜:

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/219554
推荐阅读
相关标签