白交 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

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

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

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

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

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

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

神经网络概论

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

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

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

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

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

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

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

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

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

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

3、导入一个激活函数,得到输出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实现了整个过程。

import numpy as npdef sigmoid(x):# Our activation function: f(x) = 1 / (1 + e^(-x))return 1 / (1 + np.exp(-x))class Neuron:def __init__(self, weights, bias):self.weights = weightsself.bias = biasdef feedforward(self, inputs):# Weight inputs, add bias, then use the activation functiontotal = np.dot(self.weights, inputs) + self.biasreturn sigmoid(total)weights = np.array([0, 1]) # w1 = 0, w2 = 1
bias = 4                   # b = 4
n = Neuron(weights, bias)x = np.array([2, 3])       # x1 = 2, x2 = 3
print(n.feedforward(x))    # 0.9990889488055994

构建神经网络

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

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

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

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

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

以Python代码示例如下:

import numpy as np# ... code from previous p hereclass OurNeuralNetwork:'''A neural network with:- 2 inputs- a hidden layer with 2 neurons (h1, h2)- an output layer with 1 neuron (o1)Each neuron has the same weights and bias:- w = [0, 1]- b = 0'''def __init__(self):weights = np.array([0, 1])bias = 0# The Neuron class here is from the previous pself.h1 = Neuron(weights, bias)self.h2 = Neuron(weights, bias)self.o1 = Neuron(weights, bias)def feedforward(self, x):out_h1 = self.h1.feedforward(x)out_h2 = self.h2.feedforward(x)# The inputs for o1 are the outputs from h1 and h2out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))return out_o1network = OurNeuralNetwork()
x = np.array([2, 3])
print(network.feedforward(x)) # 0.7216325609518421

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

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

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

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

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

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

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

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

Python示例:

import numpy as npdef mse_loss(y_true, y_pred):# y_true and y_pred are numpy arrays of the same length.return ((y_true - y_pred) ** 2).mean()y_true = np.array([1, 0, 0, 1])
y_pred = np.array([0, 0, 0, 0])print(mse_loss(y_true, y_pred)) # 0.5

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

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

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

作者表示,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4、返回步骤1。

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

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

传送门

https://victorzhou.com/tag/machine-learning/

作者系网易新闻·网易号“各有态度”签约作者

「数据库」系列公开课开启,快来免费报名!

6月23号第二期直播,浪潮信息数据库产品线总经理--乔鑫分享「传统企业互联网下的数据平台升级」,将讲述HTAP数据库的技术原理、优化方案以及开发部署概要等技术问题,以此带给广泛关注者一些前瞻指导。

扫码报名,可加入直播交流群,还可获取系列课程直播回放、分享PPT:

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !

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

  1. python 分类_简单机器学习入门教程:用Python解决简单的水果分类问题

    在这篇机器学习入门教程中,我们将使用Python中最流行的机器学习工具scikit- learn,在Python中实现几种机器学习算法.使用简单的数据集来训练分类器区分不同类型的水果. 这篇文章的目的 ...

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

    白交 发自 凹非寺  量子位 报道 | 公众号 QbitAI 你想学机器学习吗?这里有一个入门贴适合你. 什么神经网络.随机森林.计算机视觉通通一网打尽. 这个Facebook软件工程师做了一个入门贴 ...

  3. 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  4. 机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  5. 机器学习入门系列四(关键词:BP神经网络)

    机器学习入门系列四(关键词:BP神经网络) 标签: 机器学习神经网络 2016-01-12 15:28 80人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: 机器学习(3) 作者同类文章X 版 ...

  6. 【转】 机器学习入门——浅谈神经网络

    [转] 机器学习入门--浅谈神经网络 本文转自:https://blog.csdn.net/bitjoy/article/details/50464989 先从回归(Regression)问题说起.我 ...

  7. 机器学习原来如此有趣!全世界最简单的机器学习入门指南

    机器学习原来如此有趣!全世界最简单的机器学习入门指南更多关于机器学习的实战案例 你是否曾经听到过人们谈论机器学习,而你却对其含义只有一个模糊的概念呢?你是否已经厌倦了在和同事对话时只能点头呢?现在,让 ...

  8. 美亚畅销的百页机器学习入门书,不止简单易懂

    我与"机器学习"的初次邂逅是在5年前,那时我刚刚决定于新加坡南洋理工大学攻读计算机博士学位.比起计算机学院的主流课程,如数据库.软件开发.嵌入式系统等,"机器学习&quo ...

  9. 机器学习原来这么有趣!第一章:全世界最简单的机器学习入门指南

    第一章:全世界最简单的机器学习入门指南 https://blog.csdn.net/wskzgz/article/details/89917343 第二章:用机器学习制作超级马里奥的关卡 https: ...

最新文章

  1. vs2015 Preprocessor
  2. JVM插码之六:jacoco插码及问题“$jacocodata 属性 Method not found: is$jacocoData”
  3. 远程桌面提示:身份验证错误 要求的函数不受支持
  4. python3爬虫初探(三)之正则表达式
  5. 【洛谷 1879】玉米田
  6. 计算机一级excel如何选择2个,2017年计算机一级excel操作题(2)
  7. Java RandomAccessFile readChar()方法及示例
  8. 除了速度与激情 领克01带给我另一种有关生活方式的想象
  9. 代理ip怎么使用_爬虫如何使用代理ip解决封禁?
  10. DLA SQL分析函数:SQL语句审计与分析的利器
  11. 数组遍历,判断数组中的对象中某一属性值时候为空
  12. 易恢复Ontrack EasyRecovery15绿色版
  13. java saxreader 字符串_Java SAXReader.read方法代碼示例
  14. swapfile.sys文件的作用及如何禁用Hibernate.sys和Pagefile.sys
  15. 如何批量将图片转换为 Excel 文档
  16. seo关键词挖掘与筛选技巧
  17. 女性程序员你需要注意
  18. c语言中执行cl exe时出错,执行cl.exe时出错怎么办
  19. WPS插件 - 保存Unicode编码的CSV文件
  20. 用IntelliJ IDEA开发Python

热门文章

  1. Pycharm 基本快捷键
  2. 如何高效地遍历 MongoDB 超大集合?
  3. RouterOS限速更高级运用
  4. #研发解决方案#智慧的太空桥管理智慧设备
  5. 系统自动登录及盘符无法双击打开问题处理
  6. Python模拟弹道轨迹
  7. 2017年2月24日星期五
  8. 项目经验分享——Java常用工具类集合 转
  9. c语言作业雇人写,C语言作业的链表数据的读写
  10. jvm类加载过程_JVM知识点——深入理解JVM的类加载