Embracing the Unexpected: A Lesson in Learning by Doing

Embracing the Unexpected: A Lesson in Learning by Doing

Explore the motivations, challenges and unexpected outcomes of taking a project from start to finish.

In my opinion, there's no better way to learn a new skill than just sitting down and doing it. Sometimes that's easier said than done, and sometimes we're so new to a field that we might not even know what skill we should learn.

When I decided to learn about Machine Listening (Audio Machine Learning), I really had no idea how broad the field was. I naively thought that audio classification was basically all there was to it. Training a deep neural network to classify audio clips seemed like the sexiest place to start, but in reality, it is one of last steps (and probably easiest). Starting at the finishing line might feel good for a moment, but running the marathon will stay with you for life.

So how do we figure out where the starting line is? Rather than blindly deciding what we think we should learn, shouldn't we allow the skills we actually need to present themselves to us?

Just as a journey of a thousand miles starts with a single step, this is a story about taking that first step, and how it can lead to a thousand unexpected skills and experiences to prepare you for your next travels.

Distracted by the Finishing Line

A few years ago, I was starting to hit a roadblock in my machine learning (ML) education. Online courses and tutorials are a great way to get started, but eventually you find yourself tiring of the same beginner syntax and basic "hello world" examples.

Even in the context of learning something more complex (like training a deep neural network to classify images), there are so many great tutorials on YouTube with accompanying source code on GitHub... but the trouble with that is - you don't even have to write a single line of code.

Watch the video.
Clone the repo.
Run the code.
Model trained, job done - give yourself a pat on the back.

Now I'm not saying that you won't learn anything following this format - but if you never apply the skills in your own way, how can you demonstrate to potential clients or employers that you know your stuff?

Crossing the finishing line is one thing, but what clients and employers really want to know is... can you run the whole race?

What is really needed, is a proof of work - a project or portfolio that says, "yeah, I know what I'm doing... just look at this".

This is the position I had found myself in a few years back - I needed to step away from learning the basics, and start growing my portfolio with something challenging - I needed to find the starting line.

Data - The Foundation of Machine Learning

In the machine learning world, data is the first and perhaps most crucial component underlying a project. Data is everywhere, but good, useable data is harder to come by. Data must be practicably obtainable, representative of it's use-case, relatively clean and (usually) well-labelled (supervised and semi-supervised learning).

Open-source datasets are at the heart of machine learning education and academic research. Newbies to the ML field need them to practice applying their new skills to real-world tasks, and researchers need them to develop and test methodologies for improving benchmarks and edging towards more generalised models.

Despite their obvious importance, open-source datasets were a roadblock to me becoming a fully-fledged, end-to-end machine learning engineer. If I only use publicly available data, how can I gain experience in the most fundamental aspect of ML (collecting, cleaning and labelling data)? After all, very few real-world business problems can be solved with open-source data alone. Training a model might be cool, but it doesn't show that I can solve a problem... I needed a novel ML project that I could take from start to finish, collection to prediction, idea to outcome.

Deciding on a project

Typically, a Machine Learning project will stem from a desired business or social objective. A bank might want to detect fraudulent transactions or predict customer churn, and a hospital might desire an automated way to detect anomalies in X-rays (so they can be prioritised for reporting). For me however, I didn't have a particular business use-case in mind - my objective was to further my education, learn new skills and gain valuable experience along the way.

When you take business objectives off the table, the possibilities become seemingly endless. You can choose whatever interests you most, your only limit is your imagination, and your ability to access or collect data.

When I was considering the kind of project I should take on, I was starting to learn about Audio Signal Processing and Machine Listening tasks. I found an excellent series on YouTube by Valerio Velardo called "Deep Learning (for audio) with Python" - and Valerio also hosts a very active Slack channel called "The Sound of AI" where community members help one-another, share ideas and meet like-minded people. With such a friendly and engaging community, I felt this would be a great place to ask for help or advice if I ever got stuck (PS, if you are interested in machine listening or audio AI, I highly recommend you join the channel).

So I wanted to learn audio ML, I found a great audio ML community with a ton of resources... it was a no-brainer - this would be an audio ML project, but what exactly?

Do what you love, and you'll never work a day in your life.

The quote above is just as applicable to education and learning as it is for doing a job or running a business - without interest or passion, things tend to become a chore. Choose a topic you love, and the learning will organically follow.

For me, I'm a bit of an aviation enthusiast (it never ceases to amaze me how they keep those giant tin-cans in the air!), and I also happened to live under a flight-path (which I know is a nightmare for many people). Although I don't particularly love when a cargo plane shakes the house in the middle of the night - here is something I'm genuinely interested in (aviation), and have access to a never-ending supply of audio data - my brain started ticking...

If I can tell the difference between a piston-prop, turbo-prop, turbofan and helicopter from sound alone... surely a machine can too?

This is a classic audio classification task, but as far as I could tell - there were no open-source datasets or models for this particular situation.

That's when I got excited. I had found a novel task in a niche topic I am interested in. Perfect!

I couldn't just download an open-source dataset. I couldn't just clone someone else's notebook and "run all cells". If I were going to do this, it would be all up to me - and that's exactly what I wanted.

Make a Commitment, Get Started, Follow Through

Now that I had a general idea of the task/project, I just needed to figure out how to make it possible... this is where the organic learning starts to show itself.

As you start to ask yourself questions about the how, the underlying challenges of the task begin to show themselves. If you don't have an immediate answer to a question, then you've just discovered the next thing you need to learn!

Ask questions. Answer questions. Rinse and repeat.

The idea is to embrace the challenges that arise as "mini-milestones". Each challenge you overcome is one step closer to finishing your project, and each challenge is another experience to add to your arsenal. No matter what field you are in, the skill you really want to develop and demonstrate - is your ability to overcome and adapt when things get tough.

Make a commitment and get started. If it's something you're passionate about, it won't be a chore and the experience will naturally follow.

Looking back now, I had no idea just how deep and diverse this project would turn out to be. However despite these unexpected challenges, I would do it all over again - because I know that a formulated "lesson plan" could never produce the kinds of experience gained from tackling an end-to-end project.

Long story short, when I kicked off this project, I expected to learn quite a bit about audio ML (which I certainly did)... what I did not expect was:

  • learning how to use a software defined radio with a digital decoder to pipe aircraft positional data (ADS-B) to a Python script (no internet required).

  • working with geospatial data; plotting positions and calculating distances.

  • having to do quite a bit of web scraping.

  • building a custom web application with Python and Streamlit for reviewing and annotating audio.

  • learning how and where to host a dataset for open-source use.

  • collaborating with an ML engineer to formalise the data collection methodology with a technical report. (The AeroSonicDB (YPAD-0523) Dataset for Acoustic Detection and Classification of Aircraft)

  • learning LaTeX typesetting language - used for preparing technical and scientific documents.

  • learning how to maintain a GitHub repository for a data science project (for collaboration and to ensure reproducible results).

  • learning how to run the codebase on a Raspberry Pi - which really means learning Linux.

  • learning how to power the Raspberry Pi from a 12 volt battery.

  • collaborating on a totally different audio ML paper which is set to be presented at an acoustics conference.

There is more, but you get the idea.

Before I started, I had no idea all this was in front of me. That is the reality of real-world projects, and that is the real experience gained from taking a project from start to end... understanding that problems do arise, and showing that you won't let them stop you.

OK, that's all for this post. I will be sharing more about this project over the coming weeks as I start my next experience building project... writing this blog. In the meantime, what are your thoughts? Do you learn better in the classroom, or with practical hands-on experience? What unexpected skills have you learned from taking on a personal project? Leave your thoughts and comments below, and I'll see you in the next post!