理论
单隐层神经网络由于隐层的非线性激活函数(Sigmoid/tanh/ReLu),理论上可以近似任意非线性函数。单隐层神经网络输入层维度为d(等于输入向量的维度),隐层维度为q(人为指定,q的指定有一定经验性和技巧性),输出层维度为k(k为类别个数,输出k维向量用于近似k类的one-hot编码,特例是k==2时输出层维度为1)。神经网络的参数是各层神经元之间的连接权值和非输入层神经元的阈值,单隐层神经网络的参数量为 (d + k + 1) q + k.
神经网络的训练(参数更新)采用误差逆传播(BP)算法,BP算法其实是梯度下降算法在神经网络上的变形。梯度下降算法是一种经典的数值优化算法,简而言之就是每次参数更新的方向是目标函数误差的负梯度方向。BP算法解决的问题就是层与层之间梯度传播问题,其数学实质是链式求导法则。
代码
# -*- coding: utf-8 -*-
"""
Created on Fri Aug 24 09:06:34 2018
From 'Machine Learning, Zhihua Zhou' Ch5
Model: Single-Hidden-Layer Neural Network
BackPropagation
Dataset: P89 watermelon_3.0a (watermelon_3.0a.npy)
@author: weiyx15
"""
import numpy as np
import matplotlib.pyplot as plt
class Single_Hidden_Layer