多标签学习方法multilabel by simple neural networks

Multilabel Neural Networks with Applications to Functional Genomics and Text Categorization

2006 IEEE Transactions on Knowledge and Data Engineering

Min-Ling Zhang and Zhi-Hua Zhou

介绍

本文提出了一种名为BP-MLL的神经网络算法,即多标记学习的反向传播,这是第一个多标签神经网络算法。顾名思义,BP-MLL源自流行的反向传播算法,通过用定义的新误差函数替换其错误函数来捕获多标记学习的特征,也就是说,属于实例的标签的排名应高于不属于该实例的标签。

多标签学习

假设给定一个实例 x i x_i 及其相关的标签集 Y i Y_i ,一个成功的学习系统倾向于对于属于 Y i Y_i 的标签值比不属于 Y i Y_i 的标签值大 f ( x i , y 1 ) > f ( x i , y 2 )  for any  y 1 Y i  and  y 2 Y i f \left( \mathbf { x } _ { i } , y _ { 1 } \right) > f \left( \mathbf { x } _ { i } , y _ { 2 } \right) \text { for any } y _ { 1 } \in Y _ { i } \text { and } y _ { 2 } \notin Y _ { i } ,对应的分类器 h ( ) h ( \cdot ) 可以通过$f ( \cdot , \cdot ) $得出 h ( x i ) = { y f ( x i , y ) > t ( x i ) , y Y } h \left( \mathbf { x } _ { i } \right) = \{ y | f \left( \mathbf { x } _ { i } , y \right) > t \left( \mathbf { x } _ { i } \right) , y \in \mathcal { Y } \} , 其中 t ( ) t(\cdot) 是一个阈值函数,通常情况下设定为零(因为这里神经网络使用的激活函数是tanh,值域为[-1,1])

BP-MLL

神经网络

在本文中,传统的多层前馈神经网络适用于从多标签示例中学习。前馈网络将神经元排列成层,第一层采用输入,最后一层采用输出。中间层与外部世界没有联系,因此被称为隐藏层。最小化平方和误差函数的最流行的方法是反向传播算法。

实际上,使传统的前馈神经网络从处理单标签示例到多标签示例有两个关键问题,第一个关键是设计一些特定的误差函数,而不是简单的平方和函数,以捕捉多标记学习的特征。其次,必须对经典学习算法进行一些修改,以便最小化新设计的误差函数。

架构

对于数据集,其中每个样本 X = R d \mathcal { X } = \mathbb { R } ^ { d } , Y = { 1 , 2 , , Q } \mathcal { Y } = \{ 1,2 , \ldots , Q \}
{ ( x 1 , Y 1 ) , ( x 2 , Y 2 ) , , ( x m , Y m ) } \left\{ \left( \mathbf { x } _ { 1 } , Y _ { 1 } \right) , \left( \mathbf { x } _ { 2 } , Y _ { 2 } \right) , \ldots , \left( \mathbf { x } _ { m } , Y _ { m } \right) \right\}
定义每个实例 x i X \mathbf { x } _ { i } \in \mathcal { X } 为d维特征向量, Y i Y Y _ { i } \subseteq \mathcal { Y } 是每个实例所对应的标签集合,维度小于等于Q。

x i x_i 做为神经网络输入层,通过三层神经网络得到输出 $c^i, c^i \in \mathbb { R }^ { Q } , -1\le c^i \le1 $(因为激活函数为tanh),传统意义上的误差函数为
E = i = 1 m E i , E i = j = 1 Q ( c j i d j i ) 2 E = \sum _ { i = 1 } ^ { m } E _ { i }, E _ { i } = \sum _ { j = 1 } ^ { Q } \left( c _ { j } ^ { i } - d _ { j } ^ { i } \right) ^ { 2 }
其中 d j i d_j^i 为第i个样本的第j个标签, d i R Q , d j i = + 1 ( j Y i ) , d j i = 1 ( j Y i ) d^i \in \mathbb{R} ^ {Q},d_j^i = + 1 \quad \left( j \in Y _ { i } \right),d_j^i = - 1 \quad \left( j \notin Y _ { i } \right) 。其中定义的误差函数仅考虑单个标签的误差,没有考虑不同标签之间的相关性,因此我们更改误差函数为
E = i = 1 m E i = i = 1 m 1 Y i Y i ( k , l ) Y i × Y i exp ( ( c k i c l i ) ) E = \sum _ { i = 1 } ^ { m } E _ { i } = \sum _ { i = 1 } ^ { m } \frac { 1 } { \left| Y _ { i } \right| \left| \overline { Y } _ { i } \right| } \sum _ { ( k , l ) \in Y _ { i } \times \overline { Y } _ { i } } \exp \left( - \left( c _ { k } ^ { i } - c _ { l } ^ { i } \right) \right)
对于单个实例的误差函数:
( 1 Y i Y i ( k , l ) Y i × Y i exp ( ( c k i c l i ) ) ) \left( \frac { 1 } { \left| Y _ { i } \right| \left| \overline { Y } _ { i } \right| } \sum _ { ( k , l ) \in Y _ { i } \times \overline { Y } _ { i } } \exp \left( - \left( c _ { k } ^ { i } - c _ { l } ^ { i } \right) \right) \right)
其中 c k i c l i c _ { k } ^ { i } - c _ { l } ^ { i } 衡量神经网络输出中属于 x i ( k Y i ) \mathbf { x } _ { i } \left( k \in Y _ { i } \right) 的标签和输出与 x i ( l Y i ) x_i \left( l \in \overline { Y } _ { i } \right) 标签的差别。很明显,差异越大,性能越好。此外,如果 c k i c_k^i (属于 x i x_i 的标签上的输出)远小于 c l i c_l^i (不属于 x i x_i 的标签上的输出),则将这种差异的否定反馈送到指数函数以严重惩罚第i个误差项,进行优化。

在本文中,全局误差函数的最小化是通过梯度下降与误差反向传播策略相结合来实现的。

训练和测试

在训练和测试前要移除数据集当中标签全为0或者全为1的情况,因为到标签为全0或者全1时,误差函数当中的正则项 1 Y i Y i \frac { 1 } { \left| Y _ { i } \right| \left| \overline { Y } _ { i } \right| } 分母为0,公式无法计算。

通过不断迭代训练模型,得到最终的BPMLL神经网络模型,这时对于每个新输入 x x 输出为 c ( 1 c 1 ) c ( -1\le c \le1) ,这个 c j ( j = 1 , 2 , , Q ) c_ { j } ( j = 1,2 , \dots , Q ) 将被用于标签排序, x x 的关联标签集由阈值函数 t ( x ) t(x) 确定,也就是 Y = { j c j > t ( x ) , j Y } Y = \{ j | c _ { j } > t ( \mathbf { x } ) , j \in \mathcal { Y } \} .

通常情况 t ( x ) t(x) 设定为0,然而,在本文中,采用文献A kernel method for multi-labelled classification中使用的阈值学习机制,推广了上述自然解。这里把 t ( x ) t(x) 看成是 c ( x ) c(x) 的线性函数, t ( x ) = w T c ( x ) + b t ( \mathbf { x } ) = \mathbf { w } ^ { \mathrm { T } } \cdot c ( \mathbf { x } ) + b ,其中 c ( x ) = ( c 1 ( x ) , c 2 ( x ) , , c Q ( x ) ) c ( \mathbf { x } ) = \left( c _ { 1 } ( \mathbf { x } ) , c _ { 2 } ( \mathbf { x } ) , \ldots , c _ { Q } ( \mathbf { x } ) \right)

对于每一个训练样本 ( x i , Y i ) \left( \mathbf { x } _ { i } , Y _ { i } \right) ,得到 c ( x i ) = ( c 1 i , c 2 i , , c Q i ) c \left( \mathbf { x } _ { i } \right) = \left( c _ { 1 } ^ { i } , c _ { 2 } ^ { i } , \ldots , c _ { Q } ^ { i } \right) ,则 t ( x i ) = arg min t ( { k k Y i , c k i t } + { l l Y i , c l i t } ) t \left( \mathbf { x } _ { i } \right) = \arg \min _ { t } ( | \{ k | k \in Y _ { i } , c _ { k } ^ { i } \leq t \} | + | \{ l | l \in \overline { Y } _ { i } , c _ { l } ^ { i } \geq t \} | ) ,通过 c ( x i ) t ( x i ) c(x_i)和t(x_i) 训练得到线性模型,以便于预测新样本的阈值函数。

代码实现

https://github.com/hinanmu/BPMLL

猜你喜欢

转载自blog.csdn.net/csdn_47/article/details/83656010