深度学习-神经元(neuron)与感知机(perceptron)

一,神经元模型

神经元模型是神经网络中最基本的组成成分(这一概念来源于生物神经网络中,通过电位变化表示“兴奋”的生物神经元。)

后来将此生物活动抽象为”M-P神经元模型“,通过对n个输入信号,通过带权重的连接(connection)进行传递,将总的输入与阈值进行比较,通过“激活函数”处理产生输出。


其中,理想的激活函数为Sgn(阶跃函数),但其不光滑,不连续的性质,实际多采用Sigmoid函数。

二,感知机

感知机是基础的线性二分类模型(即输出为两个状态),由两层神经元组成。

并且感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元。(这限制了它的学习能力)

(这样看,其实M-P神经元与感知机可以说是一种东西。)

用感知机可以很方便的实现与、或、非运算(网上例子很多),但不能处理线性不可分的问题(如异或)。

处理方法很简单,多加一层功能神经元就能解决异或问题。如下图所示


输入层与输出层之间的一层神经元被称为隐藏层或隐含层(hidden layer)。

结语

神经元(感知机)是组成神经网络的最基本成分,只需包含隐藏层,即可称为多层网络。神经网络训练的结果可以说就是连接权与阈值。



### 感知机入门教程 #### 什么是感知机感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型[^2]。 #### 感知机的历史背景 作为最古老的分类方法之一,感知机的概念早在1957年就被提出。该模型的核心思想是在平面上画出一条直线、在三维空间中画出一个平面,或更广泛地在一个高维向量空间内定义一个超平面,以此区分不同类别的数据点[^3]。 #### 模型结构工作原理 感知机由一系列权重参数 \( w \) 和偏置项 \( b \) 组成,用于描述决策边界: \[ f(x) = sign(w·x + b) \] 其中, - \( x \) 表示样本特征; - \( w \) 是权值向量; - \( b \) 称作阈值或偏移量; - 函数 `sign` 返回符号:当括号内的表达式大于零时返回+1;小于等于0则返回-1。 训练过程中调整这些参数使得误分误差最小化直到收敛为止。一旦完成训练过程,则可以根据上述公式对新来的未知样例做出预测判断它应该归属于哪一类。 #### 学习算法 ##### 原始形式 原始形式下的更新规则如下所示: 如果存在错误分类的数据\( (x_i, y_i)\),即满足条件 \(y_if(x_i)<0\) ,那么就按照下面的方式去修改当前的权重以及偏差值: ```python w <- w + η * yi * xi b <- b + η * yi ``` 这里η代表的是学习率,决定了每次迭代时步长大小的选择。 ##### 对偶形式 为了提高效率并减少内存占用,在实际应用当中通常采用对偶形式来进行优化求解。此时不再直接操作具体的样本而是基于核技巧间接处理它们之间的关系矩阵K(Kernel Matrix),从而实现非线性的映射转换效果而无需显式增加维度复杂度. #### 实现案例 下面是Python环境下简单的单层感知器实现代码片段: ```python import numpy as np class Perceptron(object): def __init__(self, eta=0.01, n_iter=10): self.eta = eta self.n_iter = n_iter def fit(self, X, y): """Fit training data. Parameters ---------- X : {array-like}, shape = [n_samples, n_features] Training vectors, where n_samples is the number of samples and n_features is the number of features. y : array-like, shape = [n_samples] Target values.""" self.w_ = np.zeros(1 + X.shape[1]) self.errors_ = [] for _ in range(self.n_iter): errors = 0 for xi, target in zip(X, y): update = self.eta * (target - self.predict(xi)) self.w_[1:] += update * xi self.w_[0] += update errors += int(update != 0.0) self.errors_.append(errors) return self def net_input(self, X): """Calculate net input""" return np.dot(X, self.w_[1:]) + self.w_[0] def predict(self, X): """Return class label after unit step""" return np.where(self.net_input(X) >= 0.0, 1, -1) # Example usage: ppn = Perceptron(eta=0.1, n_iter=10) X_train = [[...]] # Your training set here... y_train = [...] # Corresponding labels ... ppn.fit(np.array(X_train), np.array(y_train)) print(ppn.predict([[new_sample_feature_vector]])) # Predict new sample's category based on trained model ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值