【人工智能原理自学】一元一次函数感知器:如何描述直觉

你好,我是小航,一个正在变秃、变强的文艺倾年。
笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。
本文讲解一元一次函数感知器:如何描述直觉,一起卷起来叭!

目录

  • 一、Python下载安装
    • 1.下载:
    • 2.配置环境变量:
    • 3.编译器(这里我使用Pycharm)
  • 二、Rossenblatt感知器
  • 三、代码实现

一、Python下载安装

跟着官网一步步来就行:https://www.python.org

1.下载:


【人工智能原理自学】一元一次函数感知器:如何描述直觉_第1张图片
然后选择自己的系统版本,傻瓜式安装!

2.配置环境变量:

【人工智能原理自学】一元一次函数感知器:如何描述直觉_第2张图片

【人工智能原理自学】一元一次函数感知器:如何描述直觉_第3张图片
环境测试:
打开windows的命令窗口,输入python:
【人工智能原理自学】一元一次函数感知器:如何描述直觉_第4张图片
检查pip是否在环境变量,一般安装Python勾选后就自动设置好了:
【人工智能原理自学】一元一次函数感知器:如何描述直觉_第5张图片
给pip配置一个镜像源加速:

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

安装Numpy测试速度:

pip install numpy

【人工智能原理自学】一元一次函数感知器:如何描述直觉_第6张图片

3.编译器(这里我使用Pycharm)

官网链接:https://www.jetbrains.com/pycharm/

【人工智能原理自学】一元一次函数感知器:如何描述直觉_第7张图片
Python常用语法、Numpy常用参考:

  • Python学习手册:https://www.runoob.com/python3/python3-tutorial.html
  • Numpy学习手册:https://www.runoob.com/numpy/numpy-tutorial.html

二、Rossenblatt感知器

Rosenblatt感知器建立在一个非线性神经元上,即神经元的McCulloch-Pitts模型,这种神经元模型由一个线性组合器和随后的硬限幅器(执行一个符号函数)组成。神经元模型的求和节点计算作用于突触上的输入的线性组合,同时也合并外部作用的偏置。求和节点计算得到的结果,也就是诱导局部域,被作用于硬限幅器。相应地,当硬限幅器输入为正时,神经元输出+1,反之则输出-1。

感知器的符号流图:
【人工智能原理自学】一元一次函数感知器:如何描述直觉_第8张图片
从这个模型我们发现硬限幅器输入或神经元的诱导局部域是:

在这里插入图片描述

核心:通过误差修正参数

【人工智能原理自学】一元一次函数感知器:如何描述直觉_第9张图片

  • 如何调整参数:输入经过函数产生结果,用标准答案减去结果就得到了误差e,要根据e来调整参数。如:w+=e;这样当结果过小时e为正,w增加;过大时e为负,w减小

  • 为什么要乘X:当x为负时就不能是简单的w=w+e了,因为当结果过小时e为正,但w需要向小调整。所以令w=w+e*x,这样就解决了e的符号问题

  • 为什么要乘α,且α要小:如果调整的幅度过大,可能会出现w过小时增大然后过大了,过小时减小又过小了,最后搁那反复横跳。给修正项添加系数a,当a为0.05时每次修正幅度会变慢20倍

  • 数学上是可以证明w最后一定会收敛

数学证明:
【人工智能原理自学】一元一次函数感知器:如何描述直觉_第10张图片
【人工智能原理自学】一元一次函数感知器:如何描述直觉_第11张图片

简言之:朴素但又意义非凡

三、代码实现

豆豆数据集模拟:dataset.py

import numpy as np

def get_beans(counts):
	xs = np.random.rand(counts)
	xs = np.sort(xs)
	ys = [1.2*x+np.random.rand()/10 for x in xs]
	return xs,ys

豆豆预测:beans_predict.py

import dataset
from matplotlib import pyplot as plt
# 拿到随机豆豆100粒
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)

# y = 0.5 * w
w = 0.5
for m in range(100):
    for i in range(100):
        x = xs[i]
        y = ys[i]
        y_pre = w * x
        # 误差
        e = y - y_pre
        alpha = 0.05
        w = w + alpha * e * x

y_pre = w * xs
plt.plot(xs, y_pre)
plt.show()

使用了两个for循环嵌套以提高训练次数,训练结果如下:

【人工智能原理自学】一元一次函数感知器:如何描述直觉_第12张图片

你可能感兴趣的:(人工智能,人工智能,python,pycharm)