文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

神经网络原来这么简单,机器学习入门贴送给你 | 干货

2024-12-11 20:55

关注

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

你想学机器学习吗?这里有一个入门贴适合你。

什么神经网络、随机森林、计算机视觉通通一网打尽。

这个Facebook软件工程师做了一个入门贴。

专为基础为零的初学者打造。

有基础的同学,也可以来看看加深一下理解。

我们就以神经网络为例先来一睹为快吧!

神经网络概论

作者说,神经网络并不复杂!

“神经网络”一词很流行,人们通常认为它很难,但其实要简单得多。

是不是这样呢?先看再说。

神经网络的理解主要分为三个部分,神经元、神经网络的构建、训练神经网络。

神经元——神经网络的基本单元

 

 

这是2-input神经元的样子。

首先神经元接受输入x1、x2,进行一些数学运算以后,然后产生一个输出y。

在神经元里,通常会发生三件事:

每个输入乘以相应的权重;

将所有加权输入加在一起,在加上一个偏差b;

导入一个激活函数,得到输出y。

通常来说,激活函数使用Sigmoid函数,也就是常说的S型函数,输入任意值(-∞,+∞),最后输出都能停留在0-1之间。

对此,他还举了一个简单的例子。

以激活函数是S型函数、2输入神经元为例,设置参数 w=[0,1] (w1=0,w2=1),b=4。

input:x=[2,3]

output:y=0.999

这也就是最为朴素的神经网络——前馈神经网络。

对此,作者还用Python实现了整个过程。

  1. import numpy as np 
  2.  
  3. def sigmoid(x): 
  4.   # Our activation function: f(x) = 1 / (1 + e^(-x)) 
  5.   return 1 / (1 + np.exp(-x)) 
  6.  
  7. class Neuron: 
  8.   def __init__(self, weights, bias): 
  9.     self.weights = weights 
  10.     self.bias = bias 
  11.  
  12.   def feedforward(self, inputs): 
  13.     # Weight inputs, add bias, then use the activation function 
  14.     total = np.dot(self.weights, inputs) + self.bias 
  15.     return sigmoid(total) 
  16.  
  17. weights = np.array([01]) # w1 = 0, w2 = 1 
  18. bias = 4                   # b = 4 
  19. n = Neuron(weights, bias) 
  20.  
  21. x = np.array([23])       # x1 = 2, x2 = 3 
  22. print(n.feedforward(x))    # 0.9990889488055994 

 构建神经网络

神经元连接在一起就是神经网络。

两个输入,一个含有两个神经元的隐藏层,一个含有1个神经元的输出层就构建了一个神经网络。

需要注意的是,可以用多层隐藏层。就比如,像这样:

我们仍以上个示例的条件为例。

一个神经网络可以包含任意数量的层和任意数量的神经元。

以Python代码示例如下:

  1. import numpy as np 
  2.  
  3. # ... code from previous section here 
  4.  
  5. class OurNeuralNetwork: 
  6.   ''
  7.   A neural network with: 
  8.     - 2 inputs 
  9.     - a hidden layer with 2 neurons (h1, h2) 
  10.     - an output layer with 1 neuron (o1) 
  11.   Each neuron has the same weights and bias: 
  12.     - w = [01
  13.     - b = 0 
  14.   ''
  15.   def __init__(self): 
  16.     weights = np.array([01]) 
  17.     bias = 0 
  18.  
  19.     # The Neuron class here is from the previous section 
  20.     self.h1 = Neuron(weights, bias) 
  21.     self.h2 = Neuron(weights, bias) 
  22.     self.o1 = Neuron(weights, bias) 
  23.  
  24.   def feedforward(self, x): 
  25.     out_h1 = self.h1.feedforward(x) 
  26.     out_h2 = self.h2.feedforward(x) 
  27.  
  28.     # The inputs for o1 are the outputs from h1 and h2 
  29.     out_o1 = self.o1.feedforward(np.array([out_h1, out_h2])) 
  30.  
  31.     return out_o1 
  32.  
  33. network = OurNeuralNetwork() 
  34. x = np.array([23]) 
  35. print(network.feedforward(x)) # 0.7216325609518421 

训练神经网路——计算损失函数

假设,我们正在处理以下这个项目。通过人员的体重和身高来判断性别。

以weight、height作为输入,以gender作为输出。

Male设置为0,Female设置为1,还对其余数据进行了简化。

在训练神经网络之前,首先需要一个方法来量化它做得有多“好”,是否能够做得“更好”,那就是损失函数(loss)。

这里,我们将使用损失函数的一种——均方误差来计算。

预测结果越好,说明损失也就会越低。而训练神经网络的目的,就在于尽可能的减少损失。

如果我们确信所有的人都是Male,也就是说预测值为0,会出现什么样的结果?

Python示例:

  1. import numpy as np 
  2.  
  3. def mse_loss(y_true, y_pred): 
  4.   # y_true and y_pred are numpy arrays of the same length. 
  5.   return ((y_true - y_pred) ** 2).mean() 
  6.  
  7. y_true = np.array([1001]) 
  8. y_pred = np.array([0000]) 
  9.  
  10. print(mse_loss(y_true, y_pred)) # 0.5 

训练神经网络——最小化损失

计算了损失函数之后,就需要将损失最小化,这也是训练神经网络的最终目的所在。

接下来帖子有一段多变量演算,涉及微积分。

作者表示,

如果对微积分不满意,可随时跳过。

简单起见,我们就假设这个数据集中只有Alice。

那么,它的损失函数就是这样。

那么它的权重w跟偏差b,在图上标示,那么就有6个权重变量,3个偏差变量。

于是,便将损失函数写为多变量函数。

想象一下,我们只要调整w1,就可能导致L的变化。那具体是如何变化的呢?这就需要计算偏导数了。

利用链式求导法则进行反向求导,而这一过程就叫做反向传播

详细计算过程就不放在这里了,大家去他个人网站去看哦~(链接已附文末)

作者温馨提示,看这个过程的时候不要着急,拿出手中的笔和纸,能够帮助你理解。

接下来,使用随机梯度下降的优化算法,公式表示如下(以w1为例):

其中的“学习速率”控制着训练速度,过大或者过小都不合适。

如果我们将所有的变量都进行这样的优化,那么损失函数将逐渐减少,神经网络就能够得到改善。

简单来说,整个训练过程是这样的:

数据集中选择一个样本,就如Alice。

利用反向传播计算所有变量的偏导数。

使用随机梯度下降来训练神经网络,更新变量。

返回步骤1。

神经网络的部分就介绍到这里,怎么样?看完之后,有什么感想?

是不是觉得神经网络也还好了。还有其他概念等着你来学习呢!

 

来源:量子位内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯