  Rapid growth of applying Machine Learning (ML) in different domains,
especially in safety-critical areas, increases the need for reliable ML
components, i.e., a software component operating based on ML. Understanding the
bugs characteristics and maintenance challenges in ML-based systems can help
developers of these systems to identify where to focus maintenance and testing
efforts, by giving insights into the most error-prone components, most common
bugs, etc. In this paper, we investigate the characteristics of bugs in
ML-based software systems and the difference between ML and non-ML bugs from
the maintenance viewpoint. We extracted 447,948 GitHub repositories that used
one of the three most popular ML frameworks, i.e., TensorFlow, Keras, and
PyTorch. After multiple filtering steps, we select the top 300 repositories
with the highest number of closed issues. We manually investigate the extracted
repositories to exclude non-ML-based systems. Our investigation involved a
manual inspection of 386 sampled reported issues in the identified ML-based
systems to indicate whether they affect ML components or not. Our analysis
shows that nearly half of the real issues reported in ML-based systems are ML
bugs, indicating that ML components are more error-prone than non-ML
components. Next, we thoroughly examined 109 identified ML bugs to identify
their root causes, symptoms, and calculate their required fixing time. The
results also revealed that ML bugs have significantly different characteristics
compared to non-ML bugs, in terms of the complexity of bug-fixing (number of
commits, changed files, and changed lines of code). Based on our results,
fixing ML bugs are more costly and ML components are more error-prone, compared
to non-ML bugs and non-ML components respectively. Hence, paying a significant
attention to the reliability of the ML components is crucial in ML-based
systems.
