Adam Geitgey writes beginner-friendly machine learning tutorials, including the Machine Learning is Fun series, on face recognition, image recognition and Python.
HN commenters strongly recommend the Machine Learning is Fun series as an easy, example-driven introduction, especially for programmers without advanced maths.
This article talks about technologies used to produce human-like text, and "deep-fake" video and audio. The article argues that such generative AI can be used by criminals to commit fraud- but at the same time, AI can also be used on the other side to detect and prevent fraud!
You might be interested to know that the technological breakthrough that made today's realistic image and audio generation possible was in fact a form of this very idea: one AI creates fake but realistic data, while another AI attempts to detect the fake data. The two systems fight against each other in a game theoretical back-and-forth contest until both the fraudster and the fraud detector are almost perfect.
The idea, the Generative Adversarial Network, was published by Goodfellow et al. [1] in 2014 and has spread widely since then. My favorite introductory explanation of GANs is [2], which describes the generator as a money counterfeiter attempting to fraudulently submit fake dollar bills, and the discriminator as a police officer who is inspecting each dollar bill to determine whether it is real or counterfeit.
Given infinite time and memory, the mathematical result is always the same: the fraudster's output becomes perfect, and the police can only guess at random.
[1] https://arxiv.org/abs/1406.2661
[2] https://medium.com/@ageitgey/abusing-generative-adversarial-networks-to-make-8-bit-pixel-art-e45d9b96cee7
PHP has had optionally typed function parameters and return values since the late 5.x releases I think (current release is 7.3). Types are checked at runtime and throw TypeErrors if the declared types are violated. They can also be checked ahead of time by IDEs with code inspection such as PhpStorm.
The 7.4 release is adding typed class properties as well[1].
I maintain a ~75k LOC PHP codebase (using the Laravel framework), and we have almost never encountered type issues. The new style of PHP (and Javascript is heading in a similar direction tbh) is to write it almost like it's Java, but with the option to fall back to dynamic "magic" as needed. If you utilize the dynamic elements sparingly, and following widely understood conventions, the productivity-vs.-reliability tradeoff is highly favorable for many applications compared to languages like Java and C#.
P.S. I like Python, but I would argue PHP actually has a better story to tell about types these days. "While Python 3.6 gives you this syntax for declaring types, there’s absolutely nothing in Python itself yet that does anything with these type declarations..." [2]. Declaring types in a dynamic language only to have them ignored at runtime does not inspire much confidence.
1. https://laravel-news.com/php7-typed-properties
2. https://medium.com/@ageitgey/learn-how-to-use-static-type-checking-in-python-3-6-in-10-minutes-12c86d72677b
Yeah I kinda get that feel as well. The thing that makes me suspicious is the amount of unnecessary and obfuscating jargon that gets thrown about. They've even invented new jargon to replace perfectly confusing old jargon (e.g. your model's "error residual" is now your "function cost"). I've spent the past couple of weeks doing a bit of ML vision stuff. Most of the terminology was lost on me, at least until today when I discovered "Machine Learning is Fun": https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471
I think I learned more in an hour than I did in the past week, thanks to this series. The author actually bothers to explain concepts (that turn out to be fairly simple btw) like 'gradient descent'. Highly recommended read if you have the time and interest. Just to whet your appetite:
...current machine learning algorithms aren’t that good yet — they only work when focused a very specific, limited problem. Maybe a better definition for “learning” in this case is “figuring out an equation to solve a specific problem based on some example data”.
Unfortunately “Machine Figuring out an equation to solve a specific problem based on some example data” isn’t really a great name. So we ended up with “Machine Learning” instead.
If you want to jump right in with "hello world" type TensorFlow (a tool for machine learning), see https://news.ycombinator.com/item?id=12465935 (how to fit a straight line using TensorFlow)
If you like to study/read: the famous Coursera Andrew Ng machine learning course: https://www.coursera.org/learn/machine-learning
If you just want course materials from UC Berkeley, here's their 101 course: https://news.ycombinator.com/item?id=11897766
If you want a web based intro to a "simpler" machine learning approach, "decision trees": https://news.ycombinator.com/item?id=12609822
Here's a list of top "deep learning" projects on Github and great HN commentary on some tips on getting started: https://news.ycombinator.com/item?id=12266623
If you just want a high level overview: https://medium.com/@ageitgey/machine-learning-is-fun-80ea3ec3c471
> I have never been to Nicaragua, so....limited relevance
Ok, that's probably some sort of error.
> you'd think they could do slightly better
It depends on how they made their model. With machine learning, it's easy to build something that does improve the whatever high-level metric they were tying to optimize (like "revenue") , but gives essentially random results for many individuals. This is especially true for any anything that wasn't fully covered in the training data/; a handwritten digit recognizer may work wonderfully on average, while giving random results random output when presented with anything that wasn't covered by the MNIST dataabsse. Sometimes this can be especially fragile[1]!
[1] https://medium.com/@ageitgey/machine-learning-is-fun-part-8-how-to-intentionally-trick-neural-networks-b55da32b7196
This is a good paper for anyone interested in how modern Machine Translation works at the level of detail you might get from a well-written text in a college-level CS course (which is what I believe this is from). The paper starts with a background on statistical machine translation and then goes through the newer approach of sequence-to-sequence learning for translation, including word replacement and attention mechanisms. It's a good overview.
But if you are looking for a higher-level introduction that covers the same big ideas in ~10 minutes for a more general audience, here's my take: https://medium.com/@ageitgey/machine-learning-is-fun-part-5-language-translation-with-deep-learning-and-the-magic-of-sequences-2ace0acca0aa