人工智能原理自学(一)——Rosenblatt感知器模型与梯度下降算法

第一讲——一元一次函数感知器:如何描述直觉

Rosenblatt感知器模型

朴素但又意义非凡

第一个神经元模型——MCCulloch-Pitts模型,Rosenblat感知器模型正是让这个最简单的神经元模型拥有自我调整的能力

输入x
y = wx
标准答案 - y = 误差
w + α * 误差 * x = 新w
w = 新w

代码实现

import dataset
from matplotlib import pyplot as plt
xs,ys = dataset.get_beans(100)
print(xs)
print(ys)
#配置图像
plt.title("Size-Toxicity Function",fontsize = 12)#设置图像名称
plt.xlabel("Bean Size")
plt.ylabel("Toxicity")
plt.scatter(xs,ys )
plt.show()
w = 0.5
for j in range(100)
	for i in range (100)
		x = xs[i]
		y = ys[i]
		y_pre =  w* x
		error = y - y_pre
		alpha = 0.05
		w = w + alpha * error * x
		
y_pre = w * xs 
print(y_pre)
plt.plot(xs,y_pre)
plt.show()

使用了两个for循环嵌套以提高训练次数,训练结果如下:
在这里插入图片描述

第二讲 方差代价函数——知错

现代神经网络的实现方式
事物出现的频率,收敛于它的概率

代价函数(Cost Function) ——当参数w取不同值时,对环境中的问题数据预测时产生不同的误差error。反过来,利用代价函数最低点的w值,把它放回到预测函数中,这时候预测函数也就很好的完成了对数据的拟合
在这里插入图片描述
代码实现:

import dataset
import matplotlib.pyplot as plt
import numpy as np

xs,ys = dataset.get_beans(100)

w = 0.100
 

# plot the figure
plt.title ("Size-Toxicity Function",fontsize = 12)
plt.xlabel("Bean size")
plt.ylabel("Toxicity")
plt.scatter(xs,ys)
y_pre = w* xs
plt.plot(xs,y_pre)
plt.show()


es = (ys - y_pre)**2
sum_e = np.sum(es)
sum_e = (1/100) * sum_e
print(sum_e)
ws = np.arange(0,3,0.1)
es = []
for w in ws:
	y_pre = w * xs
	y_pre = w * xs
	e = (1/100) * np.sum((ys - y_pre)**2)
	es.append(e)

plt.plot(ws,es)
plt.show()

w_min = np.sum(xs * ys) / np.sum(xs * xs)
y_pre = w_min * xs
plt.title("Size-Toxcity Function Final",fontsize = 12)
plt.xlabel("Bean Size")
plt.ylabel("Toxcity")
plt.scatter(xs,ys)
plt.plot(xs,y_pre)
plt.show() 

梯度下降(一)

根据error的代数式可以看出,error的大小其实是一个以w为自变量的开口向上的抛物线函数,因此可以通过数据点(x,y)处erroe函数的梯度值来动态调整w的值。常见有:全局梯度下降(并行计算,计算量大)、随机梯度下降(不能并行计算)。mini batch —— mini批量梯度下降则结合了两者的优点,每次从样本中抽取100~200个数据进行梯度下降。
y = w * x函数模型代码实现:

import dataset
import matplotlib.pyplot as plt
import numpy as np

xs,ys = dataset.get_beans(100)

w = 0.100
 

# plot the figure
plt.title ("Size-Toxicity Function",fontsize = 12)
plt.xlabel("Bean size")
plt.ylabel("Toxicity")
plt.scatter(xs,ys)

w = 0.1 
y_pre = w * xs
for _ in range(100):
	for i in range(100):
		x = xs[i]
		y = ys[i]
		# a= x ^ 2
		# b = -2*x*y
		# c = y^2
		k = 2*(x**2)*w + (-2*x*y)
		alpha = 0.1
		w = w -alpha*k
		plt.clf()
		plt.scatter(xs,ys)
		plt.xlim(0,1)
		plt.ylim(0,1.2)
		y_pre = w * xs
		plt.plot(xs,y_pre)
		plt.pause(0.1)

梯度下降(二)

在(一)中基于与y=wx的函数模型推算出的梯度下降模型,并不能满足二维空间平面中的所有散点,即:y=wx的函数模型限制了预测直线在空间中的自由移动,只有一个 旋转自由度,因此将函数模型“升维”为y = wx + b形式,即相应的error变为error(w,b)的二元函数,因此通过三维图像表示如下:
error值的三维曲面形态
那么接下来就是同样利用梯度下降的思维找到曲面的最低点,就是问题的最优解:
在这里插入图片描述
基于梯度下降思路以及方差代价函数的神经元模型如下所示:
在这里插入图片描述高维梯度下降算法代码实现:

import dataset
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D 
xs,ys = dataset.get_beans(100)
w = 0.100
b = 100
y_pre = w * xs + b
# plot the figure
plt.title ("Size-Toxicity Function",fontsize = 12)
plt.xlabel("Bean size")
plt.ylabel("Toxicity")
plt.scatter(xs,ys)
plt.plot(xs	,y_pre)
plt.show()

for _ in range(500):
	for i in range(100):
		x = xs[i]
		y = ys[i]
		dw = 2 * x**2*w + 2*x*b - 2*x*y
		db = 2 * b + 2* x *w - 2*y
		alpha = 0.02
		w = w - alpha * dw
		b = b - alpha * db
	plt.clf()
	plt.scatter(xs,ys)
	y_pre = w * xs + b
	plt.xlim(0,1)
	plt.ylim(0,1.2)
	plt.plot(xs,y_pre)
	plt.pause(0.01)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值