1、如何拟合更复杂的函数 - nonlinear function(通过基本的函数我们可以拟合非常复杂的函数)
2、激活函数 - activation function
3、神经网络 - Nueral Network
4、深度学习 - Deep Learning
5、反向传播 - Back propogation
6、如何实现自动的反向传播
7、拓扑排序-Topological Sorting
8、自动计算梯度(偏导)Auto-Compute Grandient
0:深度神经网络机器学习∈神经网络∈机器学习
机器学习:给机器数据,让机器自己去学习,去拟合;
神经网络:通过线性与非线性函数对现实生活中的情况进行拟合;
深度学习:层数超过三层的叫做深度神经网络机器学习,简称深度学习;
90年代,深度网络不能超过三层的根本原因是数据量不够(将一组线性和非线性变换称为一层)
因此,要有高精度,就得有足够的数据量;参数多一个,所需的数据就要过一个数量级;数据量决定这个东西能不能用,数据越多,精度越准确,才越能运用。
1:sigmoid函数
除了线性函数关系(kx+b)还有一个常见的函数关系是“s”型的一种函数(非线性函数)
2:激活函数(用于非线性变换的函数)
线性函数对信号进行加强;
非线性函数实现功能;
线性函数+非线性函数能够构成所有想得到的复杂函数;=>线性+非线性的组合构成神经网络(神经网络:通过线性与非线性函数对现实生活中的情况进行拟合)
激活函数作用:让我的函数拟合非线性关系,如果没有非线性函数永远只能拟合线性关系,现实生活中绝大多数情况下都是非线性关系。
3:为了更新参数k1,b1,k2,b2,求偏导
k1 = k1 + (-1) * loss对k1的偏导
b1 = b1 + (-1) * loss对b1的偏导
k2 = k2 + (-1) * loss对k2的偏导
b2 = b2 + (-1) * loss对b2的偏导
以下公式推导证明各参数的偏导是可求的
4:如何构建一个程序,求各参数的偏导
利用计算机的“图”算法!!!
①构建计算机图
computing_graph = {
'k1' : [ ' linear_01' ],
'b1' : [ ' linear_01' ],
'x' : [ ' linear_01' ],
'L1' : [ ' sigmoid' ],
'sigmoid' : [ ' linear_02' ],
'b2' : [ ' linear_02' ],
'k2' : [ ' linear_02' ],
'L2' : [ 'loss' ],
'y' : [ ' loss' ],
}
②在图中,根据已知接点找到输出节点
def get_output ( graph , node ) :
outputs = []
for n , links in graph.items():
if node == n:
outputs += links
return outputs
get_output (computing_grapth, 'k1') #输出的为 [' linear_01']
③如何求得K1的偏导
- 获得k1的输出节点
- 获得k1输出节点的输出节点
- 直到我们获得最后的一个节点
computing_order = []
target ='k1'
out = get_output(computing_graph, target)[0]
computing_order.append(target)
while out: #当还有输出时
computing_order.append(out)#把out放入computing_order中
out = get_output(computing_graph,out)#下一个节点的下一个节点
if out: out = out[0]
//computing_order # ['k1', 'linear_01', 'sigmoid', 'linear_02', 'Loss']
order = []
for index, n in enumerate( computing_order[: -1] ): #用index和n两个变量分别遍历整个computing_order
order.append(( computing_order[index+1] , n )) #将index和n遍历的数据放入order中
return ‘*’.join([ '{} /
{}'.format(a,b) for a, b in order[:: -1] ]) #order[:: -1]逆向排序
5:拓扑排序(第二节课2:28:30)
① 选择一个没有输入的节点,如果有多个没有输入的接点就任选一个;
② 在图中删去第一步选择的节点,把选择的节点作为我们的访问顺序节点;
③ 检查图是否为空,如果不为空,跳到①