Answers.Body: <p>I think that making some draws might help.</p>
  
  <p>Below I tried to draw the model architecture. We start with classic feed-forward structure: input represented by a vector <strong>I</strong> with length <em>f</em> (number of features), a hidden layer <strong>H</strong> which does <strong>not</strong> have a fixed size, and output <strong>O</strong> of length <em>c</em> (number of classes). Then we have 3 extra vectors than usual:
  a vector <strong>U</strong> they refer as input (a bit confusing I have to say), and two vectors <strong>V</strong> and <strong>P</strong> representing classes probabilities. All these vectors have length <em>c</em>.</p>
  
  <p><strong>P</strong> is what we want to learn, new class probabilities for each instance that should correct wrong labels of misclassified instances in the initial dataset.
  So in some sense the aim of the work is not to train a model to make predictions but rather train a model to clean a training dataset. I think it's important to stress out this point because we talk about training but there is actually no test after the training, we just end with a modified training dataset with some instances relabelled. 
  The relabelling depends on the learning of <strong>V</strong> rather than P (because as I will say also later on, the final arrow that goes from <strong>V</strong> to <strong>P</strong> is the identity function). <strong>V</strong> depends on <strong>U</strong> that also depends on <strong>V</strong>, again it sounds a bit confusing, the tricks rely in the initialisation. </p>
  
  <p>In the second picture I just copied some formulas from the paper. They don't specifically say how they get the vector <strong>P</strong> in the first place, but I treat it simply as given because we need it to initialise <strong>U</strong> by applying the inverse sigmoid function, element-wise. We need also to define the hyper parameter D, the initial probability value for the true class V<span class="math-container">$_y$</span> in the initial dataset. In the paper they set it to .95. Using D we can initialise the vector <strong>V</strong>.</p>
  
  <p>Once we initialise <strong>U</strong> and <strong>V</strong> we have all the elements to iterate over the dataset. </p>
  
  <p>A first thing to notice is that they don't use back propagation to update <strong>U</strong>,<strong>V</strong> and <strong>P</strong>, they just define some updating rules (which require to define some other initial parameters, <span class="math-container">$\textit{u$_0$}$</span> and L<span class="math-container">$_p$</span>). I want to stress out again that the mapping between <strong>V</strong> and <strong>P</strong> is just the identity function, I guess that they define it just to avoid confusion, because in the paper <strong>P</strong> appear as an input element, but nevertheless is also the output we want to learn. Back propagation is used only to update the weights in <strong>H</strong>. </p>
  
  <p>ANSWERS TO THE QUESTIONS:</p>
  
  <p>So we can finally say that, regarding your first question, the answer is yes, they do start updating the classes probability vectors <strong>P</strong> from the very first iteration, even though is not clear how they initialise them (or from where they got them). </p>
  
  <p>Regarding the second question instead I would say that no, this is definitely not as training a model with fixed label and then making predictions over the training dataset again. The whole point is that similar training instances will be initialised with the same <strong>P</strong>, and they will also produce similar <strong>U</strong> and <strong>V</strong> vectors. For misclassified instances, <strong>U</strong> will be updated with larger changes, because of the different produced <strong>O</strong>. For example an image of a 2 will generate a different output than an image of a 5, this would be reflected first on <strong>U</strong> and then on <strong>V</strong> and <strong>P</strong> . If training with fixed label instead you would just force the weight in the hidden layer to learn a function that treat the representation of a 2 and a 5 in a similar way, leading to low accuracy cause you would be telling the model "Hey, the straight line in the 5 is important also to recognise a 2". </p>
  
  <p>I have to say that I never read about this dataset cleaning approach but it is interesting, and their results show that the cleaned version of the dataset lead to better performances, which is interesting because machine learning analysis usually gives for granted the correctness of the labels. </p>
  
  <p>Hope this is of help in some ways! </p>
  
  <p><a href="https://i.sstatic.net/lyUIl.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/lyUIl.jpg" alt="enter image description here"></a></p>
  
  <p><a href="https://i.sstatic.net/3MQ1V.jpg" rel="nofollow noreferrer"><img src="https://i.sstatic.net/3MQ1V.jpg" alt="enter image description here"></a></p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T22:19:47.593Z
Answers.Text: Many many thanks. This is really helpful. I think vector P is coming from D i.e. initial probability values with higher values to actual class: "In our experiment we chose D = 0.95. If C = 3 and y = 1, for example, then p1(O) = 0.95, and p2(O) = p3(O) = 0.05/2 = 0.025" Is it correct? 2. May be I missed it, where do they mention initialising U by inverse sigmoid. In equation 3, its V by sigmoid? 3. Do they only update class probabilities during training or also label (equation 5)? I thought labels should be updated in the end other wise whole input labels will be messed up after 1st Epoch.
Answers.UserDisplayName: ViB
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T22:31:37.690Z
Answers.Text: D is used to initialise V, which in principle is the same as P after the first iteration, but you might be right and they could have use the same initialisation for P as well. U initialisation is explained at page 495 "The input Ui is then determined from the corresponding output using the inverse sigmoid function". The arctan used to calculate V is another mystery, they say sigmoid and then they write tanh in the formula.  The label in question 5 are calculated to perform the back propagation update on the hidden layer weight, so in my opinion they update it every step, not every epoch.
Answers.UserDisplayName: Edoardo Guerriero
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T22:41:30.853Z
Answers.Text: Waao, this is also what I missed "The input Ui is then determined from the corresponding output using the inverse sigmoid function".
Answers.UserDisplayName: ViB
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T22:46:23.723Z
Answers.Text: Sorry, I meant every iteration not epoch. By step you mean one iteration?
Answers.UserDisplayName: ViB
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T22:52:20.573Z
Answers.Text: Yes I mean one iteration, sorry I'm not always consistent in my terminology :)
Answers.UserDisplayName: Edoardo Guerriero
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T22:57:16.190Z
Answers.Text: Thanks. So it means that we first update labels on forward-propagation and then calculate the error with updated labels and then back-propagation?
Answers.UserDisplayName: ViB
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T23:07:36.977Z
Answers.Text: You may be right again, I followed the updates order as describe in the paper. But thinking about it I would say that the order is probably not so determinant. I could update the label straight away and then back propagate using the new label, or I could back propagate with the actual label, then update the label and at that point the weights will be refined at the next epoch with the updated label (slowing down convergence probably). This is a classic situation in which the paper code would be really useful.
Answers.UserDisplayName: Edoardo Guerriero
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2020-03-15T21:50:26.617Z
Answers.LastActivityDate: 2020-03-15T21:50:26.617Z
Answers.UserDisplayName: Edoardo Guerriero
Body: <p>I am trying to understand an algorithm for correcting mislabeled data in the paper <a href="https://pdfs.semanticscholar.org/3a09/c6f3873dd0327a3f9d83b7ff1c8b43a06cc3.pdf" rel="nofollow noreferrer">An algorithm for correcting mislabeled data</a> (2001) by Xinchuan Zeng et al. The authors are suggesting to update the output class probability vector using the formula in equation 4 and class label in equation 5. </p>
  
  <p>I am wondering: </p>
  
  <ol>
  <li><p>Are they updating labels while training, starting from very first back-propagation? </p></li>
  <li><p>It seems like if we train on the same data and then predict labels on the same data, it would be the same as what the authors are suggesting. Does it make sense or I misunderstood?</p></li>
  </ol>
  
Tags: <neural-networks><deep-learning><papers><multilayer-perceptrons><multi-label-classification>
Title: Are the labels updated during training in the algorithm presented in "An algorithm for correcting mislabeled data"?
UserDisplayName: ViB
ThreadText: # Are the labels updated during training in the algorithm presented in "An algorithm for correcting mislabeled data"?
  
  (Asked by: username_0 on 2020-03-14)
  
  I am trying to understand an algorithm for correcting mislabeled data in the paper [An algorithm for correcting mislabeled data](https://pdfs.semanticscholar.org/3a09/c6f3873dd0327a3f9d83b7ff1c8b43a06cc3.pdf) (2001) by Xinchuan Zeng et al. The authors are suggesting to update the output class probability vector using the formula in equation 4 and class label in equation 5.
  
  I am wondering:
  
  1. Are they updating labels while training, starting from very first back-propagation?
  2. It seems like if we train on the same data and then predict labels on the same data, it would be the same as what the authors are suggesting. Does it make sense or I misunderstood?
  
  **Tags:** neural-networks, deep-learning, papers, multilayer-perceptrons, multi-label-classification
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2020-03-15. Score: 2 | Accepted answer
  
  I think that making some draws might help.
  
  Below I tried to draw the model architecture. We start with classic feed-forward structure: input represented by a vector **I** with length *f* (number of features), a hidden layer **H** which does **not** have a fixed size, and output **O** of length *c* (number of classes). Then we have 3 extra vectors than usual:
  a vector **U** they refer as input (a bit confusing I have to say), and two vectors **V** and **P** representing classes probabilities. All these vectors have length *c*.
  
  **P** is what we want to learn, new class probabilities for each instance that should correct wrong labels of misclassified instances in the initial dataset.
  So in some sense the aim of the work is not to train a model to make predictions but rather train a model to clean a training dataset. I think it's important to stress out this point because we talk about training but there is actually no test after the training, we just end with a modified training dataset with some instances relabelled.
  The relabelling depends on the learning of **V** rather than P (because as I will say also later on, the final arrow that goes from **V** to **P** is the identity function). **V** depends on **U** that also depends on **V**, again it sounds a bit confusing, the tricks rely in the initialisation.
  
  In the second picture I just copied some formulas from the paper. They don't specifically say how they get the vector **P** in the first place, but I treat it simply as given because we need it to initialise **U** by applying the inverse sigmoid function, element-wise. We need also to define the hyper parameter D, the initial probability value for the true class V$\_y$ in the initial dataset. In the paper they set it to .95. Using D we can initialise the vector **V**.
  
  Once we initialise **U** and **V** we have all the elements to iterate over the dataset.
  
  A first thing to notice is that they don't use back propagation to update **U**,**V** and **P**, they just define some updating rules (which require to define some other initial parameters, $\textit{u$\_0$}$ and L$\_p$). I want to stress out again that the mapping between **V** and **P** is just the identity function, I guess that they define it just to avoid confusion, because in the paper **P** appear as an input element, but nevertheless is also the output we want to learn. Back propagation is used only to update the weights in **H**.
  
  ANSWERS TO THE QUESTIONS:
  
  So we can finally say that, regarding your first question, the answer is yes, they do start updating the classes probability vectors **P** from the very first iteration, even though is not clear how they initialise them (or from where they got them).
  
  Regarding the second question instead I would say that no, this is definitely not as training a model with fixed label and then making predictions over the training dataset again. The whole point is that similar training instances will be initialised with the same **P**, and they will also produce similar **U** and **V** vectors. For misclassified instances, **U** will be updated with larger changes, because of the different produced **O**. For example an image of a 2 will generate a different output than an image of a 5, this would be reflected first on **U** and then on **V** and **P** . If training with fixed label instead you would just force the weight in the hidden layer to learn a function that treat the representation of a 2 and a 5 in a similar way, leading to low accuracy cause you would be telling the model "Hey, the straight line in the 5 is important also to recognise a 2".
  
  I have to say that I never read about this dataset cleaning approach but it is interesting, and their results show that the cleaned version of the dataset lead to better performances, which is interesting because machine learning analysis usually gives for granted the correctness of the labels.
  
  Hope this is of help in some ways!
  
  [![enter image description here](https://i.sstatic.net/lyUIl.jpg)](https://i.sstatic.net/lyUIl.jpg)
  
  [![enter image description here](https://i.sstatic.net/3MQ1V.jpg)](https://i.sstatic.net/3MQ1V.jpg)
  
  > **Comments:**
  > **username_0**: Many many thanks. This is really helpful. I think vector P is coming from D i.e. initial probability values with higher values to actual class: "In our experiment we chose D = 0.95. If C = 3 and y = 1, for example, then p1(O) = 0.95, and p2(O) = p3(O) = 0.05/2 = 0.025" Is it correct? 2. May be I missed it, where do they mention initialising U by inverse sigmoid. In equation 3, its V by sigmoid? 3. Do they only update class probabilities during training or also label (equation 5)? I thought labels should be updated in the end other wise whole input labels will be messed up after 1st Epoch.  
  > **username_1**: D is used to initialise V, which in principle is the same as P after the first iteration, but you might be right and they could have use the same initialisation for P as well. U initialisation is explained at page 495 "The input Ui is then determined from the corresponding output using the inverse sigmoid function". The arctan used to calculate V is another mystery, they say sigmoid and then they write tanh in the formula.  The label in question 5 are calculated to perform the back propagation update on the hidden layer weight, so in my opinion they update it every step, not every epoch.  
  > **username_0**: Waao, this is also what I missed "The input Ui is then determined from the corresponding output using the inverse sigmoid function".  
  > **username_0**: Sorry, I meant every iteration not epoch. By step you mean one iteration?  
  > **username_1**: Yes I mean one iteration, sorry I'm not always consistent in my terminology :)  
  > **username_0**: Thanks. So it means that we first update labels on forward-propagation and then calculate the error with updated labels and then back-propagation?  
  > **username_1**: You may be right again, I followed the updates order as describe in the paper. But thinking about it I would say that the order is probably not so determinant. I could update the label straight away and then back propagate using the new label, or I could back propagate with the actual label, then update the label and at that point the weights will be refined at the next epoch with the updated label (slowing down convergence probably). This is a classic situation in which the paper code would be really useful.  
  
  ---
  
  