A day to share with you amazing things from every corner of Computer Science.
Today I want to talk about Generative Adversarial Networks π
π¬ But let's begin with some eye candy.
Take a look at this mind-blowing 2-minute video and, if you like it, then read on, I'll tell you a couple of things about it...
Generative Adversarial Networks (GAN) have taken by surprise the machine learning world with their uncanny ability to generate hyper-realistic examples of human faces, cars, landscapes, and a lot of other stuff, as you just saw.
Want to know how they work? π
There are many variants, but the core idea is to have 2οΈβ£ neural networks:
- βοΈ a generator network
- βοΈ a discriminator network
Both networks are connected in a sort of adversarial game, where each is trying to outperform the other.
βοΈ The discriminator is a regular neural network whose job is to determine if a specific sample (say, an image of a face) is real or generated.
This network's architecture depends on the classification task, as usual, e.g., lots of convolutions and pooling for images.
βοΈ The generator network is a decoder network, whose job is to transform an input of random values to whatever you want to generate.
In images, for example, you'll have deconvolution layers and upsampling, i.e., the "reverse" of an image classification network.
You train the discriminator by alternatively showing it real and generated images, and minimizing some classification loss (e.g., binary cross-entropy).
The generator is trained to try and "fool" the discriminator. But this is not easy, so the trick involves letting it "see" the discriminator loss function.
π‘ It's like showing you my brain while you perform a magic trick, so you can understand how I can be fooled best.
This is the basic idea, but the devil is in the details. Two common problems with GANs are:
1οΈβ£ The discriminator learns much faster, so the generator never gets a chance to catch up.
2οΈβ£ The generator gets complacent and just produces the same good examples over and over.
π€ Finally, beyond the technical challenges, the possibility of suddenly creating very realistic content opens a can of worms of ethical issues such as disinformation.
But technology itself is neither good nor bad, it is just a tool. It's on ourselves what we do with it.
As usual, if you like this topic, have any questions, or just want to discuss, reply in this thread or @ me any time. I'll be listening.
There seems to be a recent surge in the "HTML is/isn't a programming language" discussion.
While there are a lot of honest misconceptions and also outright bullshit, I still think if we allow for some nuance there is a meaningful discussion to have about it.
My two cents π
First, to be bluntly clear, if a person is using this argument to make a judgment of character, to imply that someone is lesser because of their knowledge (or lack of) about HTML or other skills of any nature, then that person is an asshole.
With that out the way...
Why is this discussion meaningful at all?
If you are newcomer to the dev world and you have some misconceptions about it, you can find yourself getting into compromises you're not yet ready for, or letting go options you could take.
One of the very interesting questions that really got me thinking yesterday (they all did to an important degree) was from @Jeande_d regarding how to balance between learning foundational/transferable skills vs focusing on specific tools.
@Jeande_d My reasoning was that one should try hard not to learn too much of a tool, because any tool will eventually disappear. But tools are crucial to be productive, so one should still learn enough to really take advantage of the unique features of that tool.
@Jeande_d One way I think you can try to hit that sweet spot is practice some sort of dropout regularization on your common tool set.
In every new project, substitute one of your usual tools for some convenient alternative. It will make you a bit less productive, to be sure...
β Today, I want to start discussing the different types of Machine Learning flavors we can find.
This is a very high-level overview. In later threads, we'll dive deeper into each paradigm... ππ§΅
Last time we talked about how Machine Learning works.
Basically, it's about having some source of experience E for solving a given task T, that allows us to find a program P which is (hopefully) optimal w.r.t. some metric M.
According to the nature of that experience, we can define different formulations, or flavors, of the learning process.
A useful distinction is whether we have an explicit goal or desired output, which gives rise to the definitions of 1οΈβ£ Supervised and 2οΈβ£ Unsupervised Learning π
A big problem with social and political sciences is that they *look* so intuitive and approachable that literally everyone has an opinion.
If I say "this is how quantum entanglement works" almost no one will dare to reply.
But if I say "this is how content moderation works"...
And the thing is, there is huge amount of actual, solid science on almost any socially relevant topic, and most of us are as uninformed in that as we are on any dark corner of particle physics.
We just believe we can have an opinion, because the topic seems less objective.
So we are paying a huge disrespect to social scientists, who have to deal every day with the false notion that what they have been researching for years is something that anyone, thinking for maybe five minutes, can weigh in. This is of course nonsense.