作者:椰子 | 来源:互联网 | 2023-05-17 14:19
Brief Guide
这个作业属于哪个课程 |
北航人工智能实战课 |
这个作业的要求在哪里 |
第二次作业要求 |
我在这个课程的目标是 |
获得机器学习相关的完整项目与学习经验;通过与人工智能行业的大牛们聊天了解行业不同方向的发展以便进行职业规划;为转CS积累基础知识并获得相关课程的成绩 |
这个作业在哪个具体方面帮助我实现目标 |
系统学习机器学习神经网络的算法,踏出人工智能的第一步! |
作业正文… |
【王俊杰de人工智能实战课】第2次作业 |
其他参考文献… |
微软AI教育GitHub |
Main Homework
代码
建立Z函数及Delta函数
单独创建函数方便修改以适用其他不同的函数
def Z(w,b):
x = 2*w+3*b
y = 2*b+1
z = x*y
return z
def Delta(w,b,dz):
dz_db = x*2+y*3
dz_dw = y*2
db = dz/2/dz_db
dw = dz/2/dz_dw
return dw,db
主程序
反复迭代,直至差值小于设定值
输出包括第几次迭代,本次迭代的差值,当前的z、w、b
w = 3
b = 4
z0 = 150
diff_z = 0.00001
z = Z(w,b)
dz = abs(z-z0)
i = 0
print(i,'th time\t Difference of z is:',dz,'\nCurrent z is:',z,'\t Current w is:',w,'\t Current b is:',b)
while (dz>diff_z):
dw,db = Delta(w,b,dz)
w-=dw
b-=db
z = Z(w,b)
dz = abs(z-z0)
i+=1
print(i,'th time\t Difference of z is:',dz,'\nCurrent z is:',z,'\t Current w is:',w,'\t Current b is:',b)
print('Calculation Finnished!')
print('Final w is: ',w)
print('Final b is: ',b)
print('Final z is: ',z)
运行结果
0 th time Difference of z is: 12
Current z is: 162 Current w is: 3 Current b is: 4
1 th time Difference of z is: 0.18140589569162557
Current z is: 150.18140589569163 Current w is: 2.6666666666666665 Current b is: 3.9047619047619047
2 th time Difference of z is: 0.005526139576176092
Current z is: 150.00552613957618 Current w is: 2.661627614008566 Current b is: 3.903322175431019
3 th time Difference of z is: 0.0001696432812252624
Current z is: 150.00016964328123 Current w is: 2.66147411013145 Current b is: 3.903278317180414
4 th time Difference of z is: 5.2089834525759215e-06
Current z is: 150.00000520898345 Current w is: 2.6614693978180823 Current b is: 3.9032769708051664
Calculation Finnished!
Final w is: 2.6614693978180823
Final b is: 3.9032769708051664
Final z is: 150.00000520898345
计算结果
总共迭代4次
误差为:5.2089834525759215e-06 <1.0e-5
w为:2.6614693978180823
b为:3.9032769708051664
思考与比较
结果比较
单变量的迭代次数为5次,双变量迭代比其少1次
单变量的运算结果为w=2.661469, b=3.903277,与双变量的运算结果相同,说明算法正确性没有问题
相关思考
增加一个变量一起反向传播、梯度下降可以使得运算速度增加、运算次数减少,但变化不够明显,即效率还不是太高。
考虑到计算Δb与Δw时是将Δz的误差平分给二者的,这可能会造成Δb相较于Δw非常小,但仍与Δw分的相同的误差值,其实这种情况下效率最高的方法应该是Δb分得的误差比Δw小。
根据这种思想,可以在分配Δz误差时,按照前一次的Δb与Δw的比值分,越大分的越多(第1次分的时候就按1/2计)。