- 博主主页:@璞玉牧之
- 本文所在专栏:《PyTorch深度学习》
- 博主简介:21级大数据专业大学生,科研方向:深度学习,持续创作中
目录
Overview
1.Goal of this tutorial
- Target:understand the basic of neural network/deep learning
- Requirements:Algebra+Probability and Python
2.Human Intelligence
- 推理:information->infer 通过综合已获得的信息 进行推理
- 预测:image->prediction 将真实世界的实体和抽象概念连接起来的过程叫预测(数字也是抽象概念)
3.Machine learning
-
机器学习 (machine learning):把以前用来做推理的大脑变成算法,用算法进行推理(例如:外卖软件会根据用户的订餐习惯,利用算法推送用户最有可能选择的食物)。
-
监督学习:拿出一组打过标签的数据集(Labeled Dataset),建立一个模型,用这些数据对模型进行训练,最终得到算法。
-
算法:1.穷举法 2.贪心法 3.分治法 4.动态规划
-
机器学习的算法与以上4种算法不同,它不是人工设计出来的,而是首先要有数据集,再从数据集中把想要的算法找出来。
-
AI -> Machine learning -> Representation learning -> Deep learning
4.How to develop learning system:
-
基于规则的系统 (Rule-based systems):input -> hand-designed program -> output
-
经典机器学习算法 (Classic machine learning):input -> hand-designed features(手工特征提取,将输入变成向量/张量) -> mapping from features (映射) -> output
-
表示学习 (Representation learning):input -> features -> mapping from features -> output
- 维度诅咒:维度越多对数据的需求量越大,但收集数据本身的工作量巨大。
所以需要把维度降低一些,还希望在把N维空间压缩成n维(n<N)的同时,尽量保持高维空间里的度量信息。这个过程叫做表示学习。
- 深度学习(Deep learning):input -> simple features -> additional layers of more abstract features -> mapping from features -> output (表示学习包括深度学习)
5.New change
- Limit of hand-designed feature
- SVM can’t handle big data set well
- More and more application need to handle unstructured data
ps:SVM(Support Vector Machine)支持向量机
6.neural networks (神经网络)
6.1反向传播(Back Propagation、BP算法)
- 反向传播是对于神经网络来说最重要的算法
- 反向传播是求偏导的过程
- 反向传播的核心是计算图(如下图所示)
a和b:输入量/权重,可经一系列运算得到e=(a+b) ∗ \ast ∗(b+1)
在计算图中每一步的计算只能进行原子计算(不能被分割的运算)
假设a=1、b=2,从节点a出发,首先计算c=a+b=1+2=3,d=b+1=2+1=3,最后可得节点e= c ∗ c\ast c∗d=3x3=9,这个过程叫做前馈。
求节点c时,一共有两条路径,即 ∂ c ∂ a \frac{\partial c}{\partial a} ∂a∂c=1和 ∂ c ∂ b \frac{\partial c}{\partial b} ∂b∂c=1。
求节点d时,只有一条路径,即 ∂ d ∂ b \frac{\partial d}{\partial b} ∂b∂d=1。
求节点e时,一共有两条路径,即 ∂ e ∂ c \frac{\partial e}{\partial c} ∂c∂e=d=3和 ∂ e ∂ d \frac{\partial e}{\partial d} ∂d∂e=c=3。
最终目标要求 ∂ e ∂ a \frac{\partial e}{\partial a} ∂a∂e和 ∂ e ∂ b \frac{\partial e}{\partial b} ∂b∂e,可以把a到e的所有路径上的偏导数相乘,就是 ∂ e ∂ a \frac{\partial e}{\partial a} ∂a∂e,即 ∂ e ∂ a \frac{\partial e}{\partial a} ∂a∂e= ∂ e ∂ c \frac{\partial e}{\partial c} ∂c∂e ⋅ \cdot ⋅ ∂ c ∂ a \frac{\partial c}{\partial a} ∂a∂c=3x1=3(链式法则),从b到e一共两条路径(b->c->e,b->d->e),将这两条路径上算出来的偏导数相加就是 ∂ e ∂ b \frac{\partial e}{\partial b} ∂b∂e,即 ∂ e ∂ b \frac{\partial e}{\partial b} ∂b∂e= ∂ e ∂ c \frac{\partial e}{\partial c} ∂c∂e ⋅ \cdot ⋅ ∂ c ∂ b \frac{\partial c}{\partial b} ∂b∂c + + + ∂ e ∂ d \frac{\partial e}{\partial d} ∂d∂e ⋅ \cdot ⋅ ∂ d ∂ b \frac{\partial d}{\partial b} ∂b∂d=3x1+3x1=6。
综上,利用BP算法可以构建复杂的计算图,且算法具有弹性(如果只是计算图发生改变,但原子计算式不变,即各个节点的偏导不变,那么算法仍然可以应用在新计算图上)。BP算法只需要计算每个原子算子的偏导,就可以在图里传播导数来实现最终的计算。
本文参考:《PyTorch深度学习实践》
我是璞玉牧之,持续输出优质文章,希望和你一起学习进步!!!原创不易,如果本文对你有帮助,可以 点赞+收藏+评论 支持一下哦!我们下期见~~