2 votos

LMS paso a paso para el aprendizaje de una función lineal

Descargo de responsabilidad

Como se trata de un trabajo de ejercicio no busco una solución completa sino una ayuda que me permita resolverlo por mi cuenta

La tarea

Dada la función de error

$E=\sum_{<b,V_{train}(b)>} (V_{train}(b)-V'(b) )² $

con

$b$ siendo la variable a predecir por nuestra función

$V_{train}(b)$ siendo el valor de entrenamiento

$V'(b)$ siendo la función aprendida

intenta aprender una función lineal para aproximar la función verdadera. Hay 5 ejemplos de entrenamiento dados: $(1,1) , (3,3),(5,4),(7,3),(9,5)$

a) Aprender la función mediante el algoritmo LMS ( = 0,1). Sólo presentar cada ejemplo una vez, en el orden dado por la lista anterior. Como inicialización utilice la siguiente función lineal: y = x.

b) Si los 5 ejemplos de entrenamiento fueron dados por adelantado, ¿cómo se puede calcular directamente la mejor función lineal aproximada aproximada, ¿cómo se puede calcular directamente la mejor función lineal? ¿Cuál es? (Sugerencia: Refresca tus conocimientos matemáticos sobre la determinación del mínimo de una función, ya que quieres minimizar la función de error).

c) Compara ambos resultados. ¿Qué observas? Explícalo.

Orientación de la conferencia

Las diapositivas de la conferencia proponen en una tarea similar el siguiente curso de acción:

Para cada ejemplo de entrenamiento $<b,V_{train}(b)>$ :

  • Calcula: $error(b)= V_{train}(b)-V'(b)$

  • Para cada peso $w_i$ calcular:

    $w_i\leftarrow w_i + * x_i * error(b)$

Además de esto se menciona anteriormente que

$V'(b)= w_0 + w_1 x_1 \dots$

donde estoy dejando el resto de $x_i$ porque sólo tenemos $x_1$ en esta tarea.

Así que, viendo todo esto, parece que lo tenemos todo excepto $V'(b)$ con los pesos desconocidos.

Pregunta

¿Cómo puedo empezar?

Introduciendo todas las variables conocidas me quedan los pesos desconocidos, ¿cómo los voy a obtener?

Editar: En relación con el LMS encontré esta fórmula (adaptada a las variables aquí):

$sgn(w^T x_i + w_0 ) = V_{train}(b) $

qué es $w^T$ ¿Aquí?

Si algo no está claro o me he olvidado de algo, por favor, deja un comentario y me ocuparé de ello.

3voto

Cristhian Gz Puntos 1332

Tal vez haga algunos cambios en la notación para aclarar. Para responder brevemente vaya al final de la respuesta ( Resumiendo ).

Tenemos que encontrar los parámetros $w_i$ , $i=1,2,\dotsc$ para una función lineal (conocida como función de hipóstasis ). $$h_w(x)=w_0+w_1x$$ donde $x$ es su valor de entrenamiento de entrada $V_{train}(b)$ y $h_w(x)$ es la salida de su función aprendida $V'(b)$ . Tenga en cuenta que yo usando sólo $w_0,w_1$ ya que su conjunto de entrenamiento tiene la forma $(x,y)$ para la regresión lineal con $n$ se necesita una función de hipotexto como $$h_w(x)=w_0+w_1x_1+w_2x_2+\dotsm+w_nx_n.$$ También, $w_0$ es su término de sesgo, intersección de ejes o intercepción, es decir, si la fórmula de la función lineal es $y=a+bx$ Entonces, aquí $w_0$ equivale a $a$ .

Ahora hay que encontrar los valores de $w_0$ y $w_1$ . Para trabajar menos puedes utilizar operaciones matriciales-vectoriales. Así, si tienes dos vectores $\mathbf w, \mathbf x$ tal que $$\mathbf w=\begin{pmatrix}w_0\\w_1\\\vdots\\w_n\end{pmatrix}\quad\text{and}\quad\mathbf x=\begin{pmatrix}x_0\\x_1\\\vdots\\x_n\end{pmatrix},$$ se puede obtener su suma mediante $$\mathbf w^T\mathbf x=\begin{pmatrix}w_0\;w_1\;\dotsm\;w_n\end{pmatrix}\begin{pmatrix}x_0\\x_1\\\vdots\\x_n\end{pmatrix}=w_0x_0+w_1x_1+w_2x_2+\dotsm+w_nx_n,$$ donde $\mathbf w^T$ es la transposición de $\mathbf w$ . Tenga en cuenta que utilizamos $x_0=1$ para fijar el término de intercepción $w_0$ (ya que $w_0x_0=w_01=w_0$ ). Así, para simplificar nuestra notación, podemos computar todos los valores entrenados por $$h(\mathbf x)=\sum_{i=0}^n w_ix_i=\mathbf w^T\mathbf x.$$ Por último, supongamos que tenemos $m$ pertenece a nuestro conjunto de entrenamiento. Necesitamos definir la función de coste (función de error) a partir de cada valor de los parámetros $w$ al número de error en $\mathbf R$ (números reales): $$E(w)=\frac{1}{2}\sum_{i=1}^m(h_w(x^{(i)}) - y^{(i)})^2,$$ donde $(x^{(i)},y^{(i)})\in \text{Training set}$ (es decir, $(x^{(i)}, y^{(i)})$ es el $i^{th}$ -elemento de conjunto de traning. Esto para evitar confusiones: índice superior al $i^{th}$ -elemento en el conjunto de entrenamiento. Índice inferior a $i^{th}$ -parámetro en $h_w$ ).

Algoritmo LMS. Consideramos que el descenso de gradiente que comienza con unos datos iniciales $w$ y realiza repetidamente la actualización $$w_j:=w_j-\eta\frac{\partial}{\partial w_j}E(w).$$ (Esta actualización es simultánea, es decir, primero se computan todos los errores y luego se actualiza).

Para aplicar este algoritmo al caso de la función lineal, obtenemos para algunos $$\begin{array}{rcl}\frac{\partial}{\partial w_j}E(w)&=&\frac{\partial}{\partial w_j}\frac{1}{2}\sum_{i=1}^m(h_w(x^{(i)}) - y^{(i)})^2\\&=&\frac{1}{2}\sum_{i=1}^m\frac{\partial}{\partial w_j}(h_w(x^{(i)}) - y^{(i)})^2\\&=&\frac{1}{2}\sum_{i=1}^m2(h_w(x^{(i)}) - y^{(i)})x_j\\&=&\frac{1}{2}2\sum_{i=1}^m(h_w(x^{(i)}) - y^{(i)})x_j\\&=&\sum_{i=1}^m(h_w(x^{(i)}) - y^{(i)})x_j.\end{array}$$ Por lo tanto, debe actualizar el peso por $$w_j:=w_j+\eta\sum_{i=1}^m(y^{(i)}-h_w(x^{(i)}))x_j^{(i)}.$$

Con un espíritu similar al de $\mathbf w^T\mathbf x$ , podemos calcular el error utilizando la matriz-vector (escribo su caso a la derecha). Supongamos que su conjunto de entrenamiento es $$X=\begin{pmatrix}-(x^{(1)})^T-\\-(x^{(2)})^T-\\\vdots\\-(x^{(m)})^T-\end{pmatrix}.$$ Also, let $\mathbf y$ be the $m$-dimensionl vector with your target values: $$\mathbf y=\begin{pmatrix}y^{(1)}\\y^{(2)}\\\vdots\\y^{(m)}\end{pmatrix}.$$ Ahora bien, como $h_w(x^{(i)})=(x^{(i)})^T\mathbf w$ podemos verificar $$\begin{array}{rcl}X\mathbf w -\mathbf y&=&\begin{pmatrix}(x^{(1)})^T\mathbf w\\\vdots\\(x^{(m)})^T\mathbf w\end{pmatrix}-\begin{pmatrix}y^{(1)}\\\vdots\\y^{(m)}\end{pmatrix}\\&=&\begin{pmatrix}(x^{(1)})^T\mathbf w-y^{(1)}\\\vdots\\(x^{(m)})^T\mathbf w-y^{(m)}\end{pmatrix}.\end{array} $$ Así, utilizando $\mathbf v^T\mathbf v = \sum_i\mathbf v_i^2$ para un vector $\mathbf v$ obtenemos $$\begin{array}{rcl}E(w)&=&\frac{1}{2}\sum_{i=1}^m(h_w(x^{(i)}) - y^{(i)})^2\\&=&\frac{1}{2}(X\mathbf w-\mathbf y)^T(X\mathbf w-\mathbf y).\end{array}$$

Resumiendo. Para obtener $$\mathbf w=\begin{pmatrix}w_0\\w_1\end{pmatrix},$$ proceder:

  1. Establezca sus colecciones $x$ y $y$ : $$x=\begin{pmatrix}1\\3\\5\\7\\9\end{pmatrix}\qquad y=\begin{pmatrix}1\\3\\4\\3\\5\end{pmatrix}.$$
  2. Bucle hasta que piense que $w_j$ convergen (prueba con $10$ iteraciones) {

    para $i=1$ a $m$ { $$w_j:=w_j+\eta\sum_{i=1}^m(y^{(i)}-h_w(x^{(i)}))x_j^{(i)}\qquad(\text{for each }j)$$ }

}

En cambio, puede utilizar

1'. Establezca sus vectores $X$ y $\mathbf y$ : $$X=\begin{pmatrix}1&1\\1&3\\1&5\\1&7\\1&9\end{pmatrix}\qquad\mathbf y=\begin{pmatrix}1\\3\\4\\3\\5\end{pmatrix}.$$ 2'. Haz un bucle hasta que creas que $\mathbf w$ convergen (prueba con $10$ iteraciones) { $$\mathbf w:=\mathbf w-\frac{\eta}{m}\left((X\mathbf w-\mathbf y)^TX\right)$$ }

Nota. Con lo anterior se puede probar una fórmula analítica para obtener los parámetros, utilizando la ecuaciones normales para computar $\mathbf w$ por $$\mathbf w=(X^TX)^{-1}X^T\mathbf y.$$

Evidentemente, hay que utilizar un programa informático (como python u octave) o un dispositivo de cálculo (con soporte matricial-vectorial) para calcular los valores.

He hablado de dos maneras, usando iteraciones y usando vectores. Además, he evitado algunos pasos sobre sus datos. Cualquier pregunta, para los pasos adicionales, por favor pregunte.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X