Why Random Numbers Aren't Random
Skills:
ML Maths Basics80%
Key Takeaways
The video explains how random numbers in computer programming languages like Python are generated deterministically using pseudo random number generators, and how this can be controlled using a seed value. It also discusses the limitations of pseudo-random number generation and the potential security issues it can lead to, especially in cryptography.
Full Transcript
[Music] hello everybody and welcome to another youtube video so in today's video i'm going to show you why random numbers are not so random what i mean by that is that random numbers in most computer programming languages are actually generated deterministically that means that you can predict exactly what numbers will be generated randomly from whatever generates the random number and you can actually control it as well now i'm going to show you a few examples here in python but you can likely try this in other programming languages as well and you'll see that the sequence you're getting is not quite random now there is a lot of techniques used to make it seem random but really what's actually used behind the hood of python and other languages when generating random numbers is a pseudo random number generator so that means it's not a real random number generator and it's not truly truly red alright so with that said let's dive into the video but first i need to talk to you about something that's not random which is the sponsor of this video before we get started i need to thank the sponsor of this video which is alco expert algo expert is the best platform to use from preparing for your software engineering coding interviews and has the highest quality coding interview practice questions with 160 practice questions detailed solutions in nine of the most popular programming languages a feature-packed browser-based coding environment extensive test suites and conceptual overviews and code walk-throughs for each and every problem algo expert is the best resource to use to ace your coding interviews algoexpert also has a data structures crash course coding interview assessments and a mock interviews feature i can highly recommend algo expert as a former customer myself and now an official instructor on the platform get started using algo expert today by clicking the link in the description and using the code tech with tim for a discount on the platform all right so let's go ahead and dive in now first thing i want to mention here is that if you want to read more about this i will leave a link in the description to the random module from python documentation so you actually see it says generate pseudo random numbers the term pseudo tells you these are not truly random numbers and well you can go through here and this pretty much explains what i'm going to recap here in this video anyways let's go back to this screen and let me show you what i mean by being able to generate the same sequence of random numbers and why the numbers are not quite random so i'm in python so i'm going to import the random module this has a bunch of functions allowing you to generate distributions random numbers random choices of elements all kinds of stuff like that regardless what i will do is say 4 underscore in range and then i'm going to go with 10 and i'm just going to print out random dot rand range and we go with 0 to 10. so this would generate a random number in the range of 0 to 10 but it won't give us 10. so to go 0 to 9 10 is kind of the upper bound which is not included anyways let's just run this and notice here this is the sequence that we get so i'm going to copy this sequence and i'm going to run this script one more time and just show you that we don't get the same sequence again right so this sequence clearly does not match this sequence and so at first glance it seems like okay it is actually giving me a random number however i'm going to show you that i can make it so it gives me the exact same sequence and the way i'm going to do that is by using this method called seed so i'm going to say random.seed i'm going to pass a seed of 1. now some of you may already know what's going to happen here but let's clear this out and let's run this so this is the sequence that we get of 10 numbers okay i'm going to put it inside of quotation marks like this and now i'm gonna run it again now notice when i run it again i get the exact same sequence now i'm not lying to you i actually am re-running the code you can see that it's flashing and i'm re-running the code a bunch of times and every single time i rerun it i get the exact same sequence why is that well the reason why i'm getting the same sequence is because i have the same seed so you can actually control the random sequence that you get based on a seed and the reason why that's the case is the seed is actually the starting value of generating random numbers and the way that a pseudo random number generator works is it starts at a specific value and performs deterministic changes to that value to give you some random value and so whenever you're starting at the same seed you always get the exact same random sequence now this might actually sound really familiar especially if you've ever played the game minecraft a lot of you have probably played minecraft and you've seen that you can import or give a seed and every time you use the same seed you get the exact same map and this works the exact same way you give a seed the seed is what generates the actual random sequence really it's kind of the starting point of it and so if you put in the same seed somewhere else you get the exact same map same thing here when we're generating random numbers in python now let's just do one more example let me change the seed to 2. now notice when i change it to 2 we get an entirely different sequence but if i keep running this i get the exact same sequence so how does the computer actually generate a random number then what does it use for this seed if it can't generate something truly random how does it pick something random for the seed well the truth is what's actually used for the seed by default is the system time so whatever the current time is when you run the code is what's passed to this seed so that it's always different the time is always different but again if you ran the code at the exact same system time like to the exact same millisecond you would get the exact same random sequence all right so now that we've looked at that let's actually look at an example where we use the system time as a random seed now this will kind of simulate what goes on behind the scenes just so you can get an idea of what the random module actually does when it's giving you random numbers so let's do this let's import time now to get the system time in python you do time dot time now this doesn't give you like the date time this gives you i believe the number of seconds past the specific date so there's some date in which they like just picked arbitrarily i guess to do this from but it's something like the number of seconds past like march 2nd on 1979 i'm completely making up that number or that date there but it's the number of seconds past a specific date so if i print this out and i go print time.time like this you'll see that we get this right so just like a huge number it's not telling me you know it's january or february or whatever the month is just giving me a number anyways if i use time.time i can put it like this now every single time i run the code let's just get rid of this here i'm going to get a different sequence so i get a different sequence because the seed is different and the time is constantly changing so that's the way that python actually does this if you don't manually set the seed of the random generator then it just uses the time and obviously we don't need to set this if we just do this right it continues using the time perfect so that's what happens when you use the system type so now that we've talked about this i'm just going to take a minute to discuss how do you actually generate something that's truly random because in a lot of cases this is no good using a pseudo random number generator can actually lead to a lot of security issues and this is really important especially if you're talking about something like cryptography which relies on the fact that random numbers are not guessable they're not predictable now in this instance it is completely predictable and so if you know the starting point of the sequence you're able to generate the random sequence you can do the entire thing to infinity as long as you know the starting point so when you're actually trying to generate something random you need to pick some external source from outside of the computer to use as your random seed or to use to generate randomness so an example of this which seems really extreme is actually radioactive decay so in a lot of instances when you're trying to generate a super random number a real random number you actually will monitor an atom and check for the radioactive decay of that atom and that is something that is random in the universe you can't predict when the decay is going to be you can predict it to you know a minute or to some level of precision but you don't know exactly when it's going to occur so a lot of computer systems that need to generate truly random numbers will observe something random in the universe like an atom and look for decay in that atom or more naively they'll use something like a mouse so as my mouse is moving around the screen this is a completely random pattern you can't predict how i'm moving the mouse and so that's something you could use to generate randomness as well or like the sequence in which i hit keys on the keyboard or the timing for that all kinds of things like that can be used to generate randomness and as a seat now i'm no expert on this topic i'm just giving you you know the little bit of knowledge i have from reading about this for a few days but i thought this was interesting and i figured i would share with you in case any of you find it interesting as well with that said if you enjoyed the video make sure to leave a like subscribe to the channel and i will see you in another one [Music]
Original Description
Welcome to another video! In this video, I'm going to show why random numbers are not random. In most computer programming languages, random numbers are generated deterministically. Meaning you can guess what the random number will be and control it as well.
💻 AlgoExpert is the coding interview prep platform that I used to ace my Microsoft and Shopify interviews. Check it out and get a discount on the platform using the code "techwithtim" https://algoexpert.io/techwithtim
📄 Resources 📄
Python Random Module: https://docs.python.org/3/library/random.html
⭐️ Timestamps ⭐️
00:00 | Why Random Numbers Aren't Random
01:58 | Random Module Documentation
02:23 | Generating Random Numbers in Python
03:30 | Random Seeding
05:45 | Using System Time As A Seed
07:11 | How To Generate Truly Random Numbers
◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️
💰 Courses & Merch 💰
💻 The Fundamentals of Programming w/ Python: https://tech-with-tim.teachable.com/p/the-fundamentals-of-programming-with-python
👕 Merchandise: https://teespring.com/stores/tech-with-tim-merch-shop
🔗 Social Medias 🔗
📸 Instagram: https://www.instagram.com/tech_with_tim
📱 Twitter: https://twitter.com/TechWithTimm
⭐ Discord: https://discord.gg/twt
📝 LinkedIn: https://www.linkedin.com/in/tim-ruscica-82631b179/
🌎 Website: https://techwithtim.net
📂 GitHub: https://github.com/techwithtim
🔊 Podcast: https://anchor.fm/tech-with-tim
🎬 My YouTube Gear 🎬
🎥 Main Camera (EOS Canon 90D): https://amzn.to/3cY23y9
🎥 Secondary Camera (Panasonic Lumix G7): https://amzn.to/3fl2iEV
📹 Main Lens (EFS 24mm f/2.8): https://amzn.to/2Yuol5r
🕹 Tripod: https://amzn.to/3hpSprv
🎤 Main Microphone (Rode NT1): https://amzn.to/2HrZxXc
🎤 Secondary Microphone (Synco Wireless Lapel System): https://amzn.to/3e07Swl
🎤 Third Microphone (Rode NTG4+): https://amzn.to/3oi0v8Z
☀️ Lights: https://amzn.to/2ApeiXr
⌨ Keyboard (Daskeyboard 4Q): https://amzn.to/2YpN5vm
🖱 Mouse (Logitech MX Master): https://amzn.to/2HsmRDN
📸 Webcam (Log
Watch on YouTube ↗
(saves to browser)
Sign in to unlock AI tutor explanation · ⚡30
Playlist
Uploads from Tech With Tim · Tech With Tim · 0 of 60
← Previous
Next →
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
A* Path Finding Algorithm(Visualization)
Tech With Tim
Python Programming Tutorial #1 - Variables and Data Types
Tech With Tim
Python Programming Tutorial #2 - Basic Operators and Input
Tech With Tim
Python Programming Tutorial #3 - Conditions
Tech With Tim
Python Programming Tutorial #4 - IF/ELIF/ELSE
Tech With Tim
Python Programming Tutorial #5 - Chained Conditionals and Nested Statements
Tech With Tim
Python Programming Tutorial #6 - For Loops
Tech With Tim
Python Programming Tutorial #7 - While Loops
Tech With Tim
Python Programming Tutorial #8 - Lists and Tuples
Tech With Tim
Python Programming Tutorial #9 - Iteration by Item (For Loops Continued...)
Tech With Tim
Python Programming Tutorial #10 - String Methods
Tech With Tim
How to Overclock a NVIDIA GPU
Tech With Tim
Python Programming Tutorial #11 - Slice Operator
Tech With Tim
Python Programming Tutorial #12 - Functions
Tech With Tim
Python Programming Tutorial #13 - How to Read a Text File
Tech With Tim
Python Programming Tutorial #14 - Writing to a Text File
Tech With Tim
Python Programming Tutorial #15 - Using .count() and .find()
Tech With Tim
Python Programming Tutorial #16 - Introduction to Modular Programming
Tech With Tim
Python Programming Tutorial #17 - Optional Parameters
Tech With Tim
Python Programming Tutorial #18 - Try and Except (Python Error Handling)
Tech With Tim
Python Programming Tutorial #19 - Global vs Local Variables
Tech With Tim
Python Programming Tutorial #20 - Classes and Objects
Tech With Tim
Cool VBS Script to Prank Your Friends!
Tech With Tim
How to Overclock an AMD GPU
Tech With Tim
Best GPU'S For Mining Ethereum (2018)
Tech With Tim
Recursion and Memoization Tutorial Python
Tech With Tim
Ethereum Mining Rig - Hardware Guide
Tech With Tim
Pygame Tutorial #1 - Basic Movement and Key Presses
Tech With Tim
How to Install Pygame (Windows 8/10)
Tech With Tim
How to Trade Your Cryptocurrency (Bitcoin, Ethereum etc.) For Cash!
Tech With Tim
How to Mine Ethereum 2018 - WORKING (Super-Easy)
Tech With Tim
Microphone Comparison - $10 Mic vs $150 Mic (Blue Yeti USB)
Tech With Tim
Pygame Tutorial #2 - Jumping and Boundaries
Tech With Tim
Pygame Tutorial #3 - Character Animation & Sprites
Tech With Tim
Pygame Tutorial #4 - Optimization & OOP
Tech With Tim
OBS Studio Tutorial - Best OBS Settings
Tech With Tim
Linear Search Algorithm - Python Example and Code
Tech With Tim
Make Any Mic Sound AMAZING! (WITH OBS)
Tech With Tim
Binary Search Algorithm - Python Example & Code
Tech With Tim
Pygame Tutorial #5 - Projectiles
Tech With Tim
Pygame Game - Mini Golf
Tech With Tim
Pygame Tutorial - Projectile Motion (Part 1)
Tech With Tim
Pygame Tutorial - Projectile Motion (Part 2)
Tech With Tim
Pygame Tutorial #6 - Enemies
Tech With Tim
Pygame Tutorial #7 - Collision and Hit Boxes
Tech With Tim
Pygame Tutorial #8 - Scoring and Health Bars
Tech With Tim
Cloud Mining vs. Hardware Mining - 2018
Tech With Tim
How to Install Pygame on Mac OSX (Fast-Simple)
Tech With Tim
Pygame Tutorial #9 - Sound Effects, Music & More Collision
Tech With Tim
Pygame Tutorial #10 - Finishing Touches & Next Steps
Tech With Tim
How to Fade Your Screen in Pygame [CODE IN DESCRIPTION]
Tech With Tim
How to Create a Button in Pygame [CODE IN DESCRIPTION]
Tech With Tim
Pygame Side-Scroller Tutorial #1 - Scrolling Background/Character Movement
Tech With Tim
Pygame Side-Scroller Tutorial #2 - Random Object Generation
Tech With Tim
Pygame Side-Scroller Tutorial #3 - Collision
Tech With Tim
Pygame Side-Scroller Tutorial #4 - Scoring and End Screen
Tech With Tim
How to Create A Message Box in Python - Tkinter
Tech With Tim
Is Ethereum Mining Still Profitable - Is It Worth It (April 2018)
Tech With Tim
How to Run MAC OSX on a WINDOWS PC (Clover Boot-loader)
Tech With Tim
Programming Problem #1 - Alphabet Soup (Beginner/Novice)
Tech With Tim
More on: ML Maths Basics
View skill →Related Reads
📰
📰
📰
📰
You Have Been Buying Graphics Cards From a Gaming Company for Twenty Years.
Medium · Machine Learning
Neil Rimer thinks the AI money is coming back out
TechCrunch AI
Technology is moving forward. But are we?
Medium · AI
Databricks hits $188B valuation, extending its run as AI’s favorite second act
TechCrunch AI
Chapters (6)
| Why Random Numbers Aren't Random
1:58
| Random Module Documentation
2:23
| Generating Random Numbers in Python
3:30
| Random Seeding
5:45
| Using System Time As A Seed
7:11
| How To Generate Truly Random Numbers
🎓
Tutor Explanation
DeepCamp AI