- Module 5: 感知机 + Pytorch 介绍 (用代码实现第一个神经网络)
使用到的库 (课前需要提前安装好):
from matplotlib import pyplot as plt
import numpy as np
import math
from sklearn import datasets
from scipy.optimize import *
import pandas as pd
import plotly.graph_objects as go
推荐教学时长:15分钟
感知机(Perceptron): 感知机是神经网络(深度学习)的起源算法,学习感知机的构造是通向神经网络和深度学习的一种重要思想。 感知机是 二类分类 的线性分类模型,由输入特征 x 得到输出类别 1 或 0 的函数。它只有一层输出层,一个神经元。从这个文件中我们将会学会如何将输入特征进行单个神经元的计算。 学习完了计算,我们会浅谈损失函数,梯度下降在神经网络中的作用
- Perceptron 一个神经元的计算
- activation function(weights * x + bias)
- 激活层
- 思考一下激活层对于输出结果有着什么样的影响?
Extra: 多个神经元计算 (如果输出层有多个(> 1), 比如,两神经元呢?如何计算结果?(需要矩阵乘法的知识))
这个网页里有一个辅助动画帮助理解:https://appliedgo.net/perceptron/
推荐教学时长:15分钟
- 损失函数 cost function
- 损失函数用来评价模型的预测值和真实值不一样的程度。
- 损失函数结果越小,通常模型的性能越好。
- 所以在机器学习问题中通常都会遇到 - 【寻找损失函数最小值问题】
简单介绍一种常用的损失函数 MSE - mean squared error
- 使用 numpy 函数从公式出发,计算数据集的MSE
- 使用sklearn library 的
mean_squared_error
函数
- 用线性回归的问题(用一条直线去表达现有数据)来引入损失函数的概念,可以变化斜率,观察一下损失的值是如何变化的
- 同学经过一些
cost_func_init.py
尝试,cost_func_visualize.py
会把所有斜率的可能性枚举,并用line plot
做可视化,程序只需要跑一遍即可
推荐教学时长:10分钟
gradient_descent_demo.py
- 建议配合使用网页版 interactive demo 演示梯度下降过程:https://uclaacm.github.io/gradient-descent-visualiser/#playground
- 搭建神经网络结构
- 前向传播(感知机运算)
- 计算损失函数 (cost function)
- 梯度下降(如果对这个内容感兴趣,同学可以搜索关键词反向传播,偏导数计算)
NOTE: 每次运行程序生成的数据都是随机的,所以每次分类结果都会不一样
之后的内容:训练集/测试集,模型准确率,多层神经网络,卷积神经网络
EXTRA 下面这段因为时间原因,暂时不放进课程内
- 告诉学生们通常在机器学习,人工智能场景下,会出现非常复杂的损失函数,但是在计算他的最小值,用传统数学方法是很难求解的。所以我们可以利用numerical optimization方法中的一种 - 梯度下降的方法找到函数最小值(有些时候找到的是函数局部最小值)
- 这个python文件我定义了一个比较复杂的方程,可以让同学通过更改x值,来观察cost函数的值是如何变化的
- 可以尝试 x = 10 -> 12 -> 8 -> 3 -> 0 -> -4 -> -2 -> -1.8 (试不同参数,理解gradient descent的intuition,朝着负梯度的方向慢慢移动,移动到最小值)
- 这里不用引入复杂的数学概念,只需要大概了解gradient descent的思想就行
1. 我在python文件里有两段代码,一个是标题写着
Numerical optimization. What's the absolute minimum of this function?
可以找到任何函数的最小值。另一个写着What does the graph look like? Uncomment below and check it out!
可以将cost
函数 plot 出来