Learning Bayesian Statistics

Proudly sponsored by PyMC Labs, the Bayesian Consultancy. Book a call, or get in touch!

In this episode, Dmitry Bagaev discusses his work in Bayesian statistics and the development of RxInfer.jl, a reactive message passing toolbox for Bayesian inference. 

Dmitry explains the concept of reactive message passing and its applications in real-time signal processing and autonomous systems. He discusses the challenges and benefits of using RxInfer.jl, including its scalability and efficiency in large probabilistic models. 

Dmitry also shares insights into the trade-offs involved in Bayesian inference architecture and the role of variational inference in RxInfer.jl. Additionally, he discusses his startup Lazy Dynamics and its goal of commercializing research in Bayesian inference. 

Finally, we also discuss the user-friendliness and trade-offs of different inference methods, the future developments of RxInfer, and the future of automated Bayesian inference. 

Coming from a very small town in Russia called Nizhnekamsk, Dmitry currently lives in the Netherlands, where he did his PhD. Before that, he graduated from the Computational Science and Modeling department of Moscow State University. 

Beyond that, Dmitry is also a drummer (you’ll see his cool drums if you’re watching on YouTube), and an adept of extreme sports, like skydiving, wakeboarding and skiing!

Our theme music is « Good Bayesian », by Baba Brinkman (feat MC Lars and Mega Ran). Check out his awesome work at https://bababrinkman.com/ !

Thank you to my Patrons for making this episode possible!

Yusuke Saito, Avi Bryant, Ero Carrera, Giuliano Cruz, Tim Gasser, James Wade, Tradd Salvo, William Benton, James Ahloy, Robin Taylor,, Chad Scherrer, Zwelithini Tunyiswa, Bertrand Wilden, James Thompson, Stephen Oates, Gian Luca Di Tanna, Jack Wells, Matthew Maldonado, Ian Costley, Ally Salim, Larry Gill, Ian Moran, Paul Oreto, Colin Caprani, Colin Carroll, Nathaniel Burbank, Michael Osthege, Rémi Louf, Clive Edelsten, Henri Wallen, Hugo Botha, Vinh Nguyen, Marcin Elantkowski, Adam C. Smith, Will Kurt, Andrew Moskowitz, Hector Munoz, Marco Gorelli, Simon Kessell, Bradley Rode, Patrick Kelley, Rick Anderson, Casper de Bruin, Philippe Labonde, Michael Hankin, Cameron Smith, Tomáš Frýda, Ryan Wesslen, Andreas Netti, Riley King, Yoshiyuki Hamajima, Sven De Maeyer, Michael DeCrescenzo, Fergal M, Mason Yahr, Naoya Kanai, Steven Rowland, Aubrey Clayton, Jeannine Sue, Omri Har Shemesh, Scott Anthony Robson, Robert Yolken, Or Duek, Pavel Dusek, Paul Cox, Andreas Kröpelin, Raphaël R, Nicolas Rode, Gabriel Stechschulte, Arkady, Kurt TeKolste, Gergely Juhasz, Marcus Nölke, Maggi Mackintosh, Grant Pezzolesi, Avram Aelony, Joshua Meehl, Javier Sabio, Kristian Higgins, Alex Jones, Gregorio Aguilar, Matt Rosinski, Bart Trudeau, Luis Fonseca, Dante Gates, Matt Niccolls, Maksim Kuznecov, Michael Thomas, Luke Gorrie, Cory Kiser and Julio.

Visit https://www.patreon.com/learnbayesstats to unlock exclusive Bayesian swag 😉

Takeaways:

– Reactive message passing is a powerful approach to Bayesian inference that allows for real-time updates and adaptivity in probabilistic models.

– RxInfer.jl is a toolbox for reactive message passing in Bayesian inference, designed to be scalable, efficient, and adaptable.

– Julia is a preferred language for RxInfer.jl due to its speed, macros, and multiple dispatch, which enable efficient and flexible implementation.

– Variational inference plays a crucial role in RxInfer.jl, allowing for trade-offs between computational complexity and accuracy in Bayesian inference.

– Lazy Dynamics is a startup focused on commercializing research in Bayesian inference, with the goal of making RxInfer.jl accessible and robust for industry applications.

Links from the show:

Transcript

This is an automatic transcript and may therefore contain errors. Please get in touch if you’re willing to correct them.

Transcript
Speaker:

In this episode, Dmitry Bagaev discusses

his work in Bayesian statistics and the

2

00:00:09,173 --> 00:00:14,676

development of RxInfer.jl, a reactive

message passing toolbox for Bayesian

3

00:00:14,676 --> 00:00:15,536

inference.

4

00:00:15,636 --> 00:00:20,458

Dmitry explains the concept of reactive

message passing and its applications in

5

00:00:20,458 --> 00:00:23,539

real-time signal processing and autonomous

systems.

6

00:00:23,539 --> 00:00:28,574

He discusses the challenges and benefits

of using RxInfer.jl, including

7

00:00:28,574 --> 00:00:31,936

its scalability and efficiency in large

probabilistic models.

8

00:00:31,956 --> 00:00:36,420

Dimitri also shares insight into the

trade-offs involved in Bayesian inference

9

00:00:36,420 --> 00:00:41,304

architecture and the role of variational

inference in rxinfer.jl.

10

00:00:41,865 --> 00:00:46,529

Additionally, he discusses his startup

Lazy Dynamics and its goal of

11

00:00:46,529 --> 00:00:49,351

commercializing research in Bayesian

inference.

12

00:00:49,451 --> 00:00:53,234

Finally, we also discussed the user

friendliness and trade-offs of different

13

00:00:53,234 --> 00:00:57,074

inference methods, the future developments

of rxinfer,

14

00:00:57,074 --> 00:00:59,595

and the future of automated patient

entrance.

15

00:00:59,595 --> 00:01:04,939

Coming from a very small town in Russia

called Nizhny Komsk, Dmitry currently

16

00:01:04,939 --> 00:01:08,021

lives in the Netherlands, where he did his

PhD.

17

00:01:08,021 --> 00:01:11,623

Before that, he graduated from the

computational science and modeling

18

00:01:11,623 --> 00:01:14,465

department of Moscow State University.

19

00:01:14,505 --> 00:01:18,448

Beyond that, Dmitry is also a drummer,

you'll see his cool drums if you're

20

00:01:18,448 --> 00:01:24,352

watching on YouTube, and an adept of

extreme sports like skydiving,

21

00:01:24,352 --> 00:01:26,193

wakeboarding, and skiing.

22

00:01:26,934 --> 00:01:32,437

Learning Basin Statistics, episode 100,

recorded January 25, 2024.

23

00:01:36,240 --> 00:01:40,904

Dmitry Pagaev, welcome to Learning Basin

Statistics.

24

00:01:40,904 --> 00:01:43,346

Thanks.

25

00:01:43,346 --> 00:01:45,607

Thanks for inviting me for your great

podcast.

26

00:01:45,607 --> 00:01:48,189

Really, I feel very honored.

27

00:01:49,390 --> 00:01:50,391

Yeah, thanks a lot.

28

00:01:50,391 --> 00:01:51,912

The honor is mine.

29

00:01:51,912 --> 00:01:54,313

That's really great to have you on the

show.

30

00:01:55,326 --> 00:02:04,592

So many questions for you and yeah, we're

also gonna be able to talk again about

31

00:02:04,592 --> 00:02:07,494

Julia, so that's super cool.

32

00:02:08,095 --> 00:02:14,199

And I wanna thank of course Albert

Podusenko for putting us in contact.

33

00:02:14,199 --> 00:02:17,481

Thanks a lot Albert, it was a great idea.

34

00:02:17,621 --> 00:02:19,982

I hope you will love the episode.

35

00:02:20,803 --> 00:02:24,410

Well I'm sure you're gonna love Dmitry's

part, and mine is always...

36

00:02:24,410 --> 00:02:25,770

more in the air, right?

37

00:02:27,132 --> 00:02:31,496

And well, Dmitry, thanks again, because I

know you're a bit sick.

38

00:02:31,496 --> 00:02:34,678

So I appreciate it even more.

39

00:02:35,759 --> 00:02:42,745

And so let's start by basically defining

what you're doing nowadays, and also how

40

00:02:42,745 --> 00:02:45,167

did you end up doing what you're doing

basically?

41

00:02:46,168 --> 00:02:46,408

Yes.

42

00:02:46,408 --> 00:02:52,693

So I'm currently working at the University

of Technology in bias lab.

43

00:02:52,818 --> 00:02:57,600

And I just recently finished my PhD in

Bayesian statistics, essentially.

44

00:02:57,600 --> 00:02:59,940

So now I'm just like supervised students.

45

00:02:59,940 --> 00:03:07,163

I did some of the projects there and bias

lab itself is a group in the university

46

00:03:07,464 --> 00:03:11,505

that primarily work on like a real time

Bayesian signal processing.

47

00:03:11,845 --> 00:03:13,446

And we do research in that field.

48

00:03:13,446 --> 00:03:19,188

And the slogan, let's say of the lab is

sort of like, is natural artificial

49

00:03:19,188 --> 00:03:21,974

intelligence and it's phrased.

50

00:03:21,974 --> 00:03:26,956

Uh, like specifically like that, because

there's, there cannot be natural

51

00:03:26,956 --> 00:03:28,036

artificial intelligence.

52

00:03:28,036 --> 00:03:31,557

So it's like a play words, let's say.

53

00:03:31,998 --> 00:03:39,041

Um, and the, the lab is basically trying

to like develop automated, um, control

54

00:03:39,041 --> 00:03:42,162

systems or like novel signal processing

applications.

55

00:03:42,162 --> 00:03:45,144

And it's basically inspired by, uh,

neuroscience.

56

00:03:45,144 --> 00:03:46,624

I know.

57

00:03:46,844 --> 00:03:49,825

And we also opened a startup with my

colleagues.

58

00:03:50,450 --> 00:03:52,110

which is called Lazy Dynamics.

59

00:03:52,110 --> 00:03:57,271

And the idea is basically to commercialize

the research in the lab, but also to find

60

00:03:57,271 --> 00:04:01,392

the new funding for new PG students for

the university.

61

00:04:01,773 --> 00:04:06,854

But they're still quite young, so we are

still like less than one year, and we are

62

00:04:06,854 --> 00:04:10,435

currently like in search of clients and

potential investors.

63

00:04:10,975 --> 00:04:16,497

But yeah, my main focus still remains

being a postdoc in the university.

64

00:04:16,497 --> 00:04:18,057

Yeah, fascinating.

65

00:04:18,057 --> 00:04:19,457

So many things already.

66

00:04:21,219 --> 00:04:24,021

Um, maybe what do you do in your postdoc?

67

00:04:24,021 --> 00:04:32,648

Um, so my main focus, like primary is, uh,

supporting, uh, the toolbox that we wrote,

68

00:04:32,648 --> 00:04:35,090

uh, in our lab that I am a primary author.

69

00:04:35,090 --> 00:04:37,532

We call this toolbox, uh, RX and Ferb.

70

00:04:37,532 --> 00:04:41,796

Uh, and this is like essential part of my

PhD project.

71

00:04:41,796 --> 00:04:46,480

Um, and basically I love to code.

72

00:04:46,480 --> 00:04:48,554

So, um, more or less like, uh,

73

00:04:48,554 --> 00:04:52,995

my scientific career was always aligned

with software development.

74

00:04:53,355 --> 00:04:57,397

And the Erikson FUR project was a really

big project and many other projects in

75

00:04:57,397 --> 00:04:58,898

BiasLab, they depend on it.

76

00:04:58,898 --> 00:05:06,521

And it requires maintenance, like box

fixing, adding new features, performance

77

00:05:06,521 --> 00:05:07,621

improvements.

78

00:05:07,621 --> 00:05:14,544

And, and we are currently have several sub

projects that we develop alongside for the

79

00:05:14,544 --> 00:05:15,644

Erikson FUR.

80

00:05:15,724 --> 00:05:18,445

And that's just like the main focus for

me.

81

00:05:20,927 --> 00:05:26,050

And as something else, I also supervise

students for this project.

82

00:05:26,050 --> 00:05:27,631

Yeah, yeah.

83

00:05:27,631 --> 00:05:28,551

Of course.

84

00:05:28,551 --> 00:05:31,373

That must also take quite some time,

right?

85

00:05:31,373 --> 00:05:33,654

Yes, exactly.

86

00:05:33,654 --> 00:05:34,294

Yeah.

87

00:05:35,955 --> 00:05:36,656

Yeah, super cool.

88

00:05:36,656 --> 00:05:43,139

So let me start basically by diving a bit

more into the concepts you've just named,

89

00:05:43,139 --> 00:05:47,646

because you've already talked about a lot

of the things you work on, which is.

90

00:05:47,646 --> 00:05:51,668

a lot, as I guess listeners can hear.

91

00:05:51,668 --> 00:05:57,853

So first, let's try and explain the

concept of reactive message passing in the

92

00:05:57,853 --> 00:06:01,496

context of Bayesian inference for

listeners who may not be familiar with it,

93

00:06:01,496 --> 00:06:06,239

because I believe it's the first time we

really talk about that on the show.

94

00:06:06,239 --> 00:06:08,620

So yeah, talk to us about that.

95

00:06:08,641 --> 00:06:13,764

Also, because from what I understand, it's

really the main focus of your work, be it

96

00:06:13,764 --> 00:06:15,665

through RxInfR.

97

00:06:15,942 --> 00:06:19,144

infer.jl or lazy dynamics or biaslam.

98

00:06:19,144 --> 00:06:26,429

So let's start by having the landscape

here about reactive message passing.

99

00:06:26,870 --> 00:06:27,951

Yes, good.

100

00:06:27,951 --> 00:06:34,356

So yeah, ARIKS and FER is what we call

reactive message passing based Bayesian

101

00:06:34,356 --> 00:06:35,976

inference toolbox.

102

00:06:36,637 --> 00:06:41,241

And basically in the context of Bayesian

inference, we usually work with

103

00:06:41,241 --> 00:06:42,721

probabilistic models.

104

00:06:43,438 --> 00:06:48,662

And the probabilistic model is usually a

function of some variables and some

105

00:06:48,662 --> 00:06:50,384

variables are being observed.

106

00:06:50,384 --> 00:06:55,347

And we want to infer some probability

distribution over unobserved variables.

107

00:06:56,508 --> 00:07:01,132

And what is interesting about that is that

if we have a probabilistic model, we can

108

00:07:01,132 --> 00:07:03,153

actually represent it as a graph.

109

00:07:04,455 --> 00:07:11,140

And for example, if we can factorize our

probabilistic model into a set of factors,

110

00:07:12,878 --> 00:07:19,079

such that each node will be a factor and

each edge will be a variable of the model,

111

00:07:19,079 --> 00:07:22,000

more like hidden state, and some of them

are observed or not.

112

00:07:22,780 --> 00:07:27,882

And basically message passing by itself is

a very interesting idea of solving Bayes

113

00:07:27,882 --> 00:07:33,103

rule for a probabilistic model defined in

terms of the graph.

114

00:07:33,803 --> 00:07:39,184

So it does it by sending messages between

nodes in the graph, along edges.

115

00:07:39,425 --> 00:07:42,902

And it's quite a very big topic actually.

116

00:07:42,902 --> 00:07:45,784

But essentially here to understand is that

we can do that, right?

117

00:07:45,784 --> 00:07:52,229

So we can reframe the base rule as

something that has this messages in the

118

00:07:52,229 --> 00:07:58,173

ground, uh, reactive message passing, uh,

is a particular implementation, uh, of

119

00:07:58,173 --> 00:07:59,274

this idea.

120

00:07:59,274 --> 00:08:04,578

So, because in the traditional message

passing, we usually have to define an

121

00:08:04,578 --> 00:08:09,381

order of messages, like how, in what order

do we compute them?

122

00:08:10,110 --> 00:08:14,451

It may be very crucial, for example, if

the graph structure has loops.

123

00:08:14,792 --> 00:08:19,614

So there is like some structural

dependencies in the graph and reactive

124

00:08:19,614 --> 00:08:22,675

message passing basically says, okay, no,

we will not do that.

125

00:08:22,675 --> 00:08:24,996

We will not specify any order.

126

00:08:24,996 --> 00:08:27,317

Instead we will react on data.

127

00:08:27,637 --> 00:08:33,900

So, and, uh, the, the order of message

computations, uh, becomes essentially data

128

00:08:33,900 --> 00:08:38,010

driven and we do not enforce any

particular, uh,

129

00:08:38,010 --> 00:08:39,616

order of competition.

130

00:08:41,722 --> 00:08:49,229

OK, so if I try to summarize, that would

be something like, usually when you work

131

00:08:49,229 --> 00:08:53,553

on a Bayesian model, you have to specify

the graph and the order of the graph in

132

00:08:53,553 --> 00:08:56,295

which direction the nodes are going.

133

00:08:57,216 --> 00:09:02,441

In reactive message passing, it's more

like a non-parametric version in a way

134

00:09:02,441 --> 00:09:07,825

where you just say, there are these stuff,

but you're not specifying the.

135

00:09:07,990 --> 00:09:12,212

the directions and you're just trying to

infer that through the data.

136

00:09:12,492 --> 00:09:14,473

How wrong is that characterization?

137

00:09:15,034 --> 00:09:16,515

Not exactly like that.

138

00:09:16,515 --> 00:09:21,758

So indeed the graph that we work with,

they don't have any direction in them,

139

00:09:21,758 --> 00:09:22,078

right?

140

00:09:22,078 --> 00:09:25,280

Because messages, they can flow in any

direction.

141

00:09:25,300 --> 00:09:30,963

The main difference here is that reactive

message passing reacts on changes in data

142

00:09:30,963 --> 00:09:33,545

and updates posteriors automatically.

143

00:09:33,805 --> 00:09:34,005

Right?

144

00:09:34,005 --> 00:09:34,606

So.

145

00:09:34,606 --> 00:09:38,808

There is no particular order in which we

update the series.

146

00:09:38,848 --> 00:09:44,511

For example, if we have some variables in

our mode, like ABC, we don't know which

147

00:09:44,511 --> 00:09:46,893

will be updated first and which will be

the last.

148

00:09:46,893 --> 00:09:50,895

It basically depends on our observations.

149

00:09:50,895 --> 00:09:56,478

Uh, but, uh, it works like that, that as

soon as we have new observation, uh, the

150

00:09:56,478 --> 00:10:00,921

graph reacts in this observation and

updates the series as soon as it can.

151

00:10:02,862 --> 00:10:05,817

without explicitly specifying this order.

152

00:10:08,246 --> 00:10:11,288

And why would you do that?

153

00:10:11,288 --> 00:10:12,809

Why would that be useful?

154

00:10:14,490 --> 00:10:15,771

So it's a very good question.

155

00:10:15,771 --> 00:10:23,037

So because in BiasLab, we essentially work

with, we try to work with autonomous

156

00:10:23,037 --> 00:10:24,017

systems.

157

00:10:25,199 --> 00:10:30,483

And autonomous systems, they have to work

in the field, right?

158

00:10:30,483 --> 00:10:33,845

So like in the real world environment,

let's say, right?

159

00:10:33,925 --> 00:10:34,525

And

160

00:10:35,046 --> 00:10:38,846

Real world environment is extremely

unpredictable.

161

00:10:40,007 --> 00:10:47,109

If we want to, to be more clear, let's say

we try to develop a drone, which tries to

162

00:10:47,109 --> 00:10:53,791

navigate the environment and it has like

several sensors and we want to build a

163

00:10:53,791 --> 00:10:57,632

probabilistic model of the environment,

such that drones wants to act in this

164

00:10:57,632 --> 00:11:01,313

environment and like in sensors, it has

some noise in it.

165

00:11:01,313 --> 00:11:03,893

Like, uh, so essentially.

166

00:11:04,742 --> 00:11:09,143

We cannot predict in what order the data

will be arriving, right?

167

00:11:09,143 --> 00:11:15,845

Because you may have a video signal, you

may have an audio signal and this, um,

168

00:11:15,985 --> 00:11:21,186

devices that record video, let's say they

also have unpredictable update rate.

169

00:11:21,246 --> 00:11:24,567

Usually it's maybe like 60 frames per

second, but it may change.

170

00:11:24,567 --> 00:11:25,287

Right.

171

00:11:25,787 --> 00:11:31,729

Um, so instead of like fixing the

algorithm and saying, okay, we wait for

172

00:11:31,729 --> 00:11:33,369

like new frame.

173

00:11:33,538 --> 00:11:39,002

from a video, wait for a new frame from an

audio, then we update, then we wait again.

174

00:11:39,002 --> 00:11:44,687

Instead of doing that, we just simply let

the system react on new changes and update

175

00:11:44,687 --> 00:11:46,569

the series as soon as possible.

176

00:11:46,569 --> 00:11:51,734

And then based on new posteriors, we act

as soon as possible.

177

00:11:51,734 --> 00:11:55,337

This is kind of the main idea of reactive

implementations.

178

00:11:57,879 --> 00:12:00,494

And in traditional software,

179

00:12:00,494 --> 00:12:05,918

for Bayesian inference, for example, we

just have a model, and we have a data set,

180

00:12:05,918 --> 00:12:11,362

and we feed the data set to the model, and

we have the posterior, and then we analyze

181

00:12:11,362 --> 00:12:14,805

the posterior, and it also works really

great, right?

182

00:12:14,805 --> 00:12:21,130

But it doesn't really work in the field

where you don't have time to synchronize

183

00:12:21,130 --> 00:12:24,393

your data set and to react as soon as you

can.

184

00:12:24,393 --> 00:12:27,615

Okay, okay, I see.

185

00:12:27,615 --> 00:12:29,777

So that's where, basically,

186

00:12:30,990 --> 00:12:37,791

This kind of reactive message passing is

extremely useful when you receive data in

187

00:12:37,791 --> 00:12:40,332

real time that you don't really know the

structure of.

188

00:12:43,013 --> 00:12:46,714

Yes, we work primarily with real-time

signals.

189

00:12:46,714 --> 00:12:48,214

Yes.

190

00:12:48,354 --> 00:12:50,435

Okay, very interesting.

191

00:12:51,255 --> 00:12:59,077

Actually, do you have any examples, any

real-life examples that you've worked on

192

00:12:59,077 --> 00:12:59,637

or...

193

00:12:59,646 --> 00:13:08,130

You know, this is extremely useful to work

on with RxInfoR.jl or just in general,

194

00:13:08,130 --> 00:13:10,431

these kind of relative messages passing.

195

00:13:11,652 --> 00:13:12,432

Yes.

196

00:13:12,593 --> 00:13:17,115

So I myself, I usually do not work with

applications.

197

00:13:17,115 --> 00:13:22,378

So my primary focus lies in the actual

Bayesian inference engine.

198

00:13:22,378 --> 00:13:28,421

But in our lab, there are people who work,

for example, on audio signals.

199

00:13:28,694 --> 00:13:28,994

Right.

200

00:13:28,994 --> 00:13:34,215

So you want to you want, for example,

maybe create a probabilistic model of

201

00:13:34,215 --> 00:13:41,398

environment to be able to denoise speech

or it or it may be like a position

202

00:13:41,398 --> 00:13:46,339

tracking system or a planning system in

real time.

203

00:13:47,420 --> 00:13:52,961

In our lab, we also very often refer to

the term active inference.

204

00:13:53,450 --> 00:13:58,571

which basically defines a probabilistic

model, not only of your environment, but

205

00:13:58,571 --> 00:14:05,093

also of your actions, such that you can

infer the most optimal course of actions.

206

00:14:05,273 --> 00:14:09,654

And this might be useful in control

applications, also for the drone, right?

207

00:14:09,654 --> 00:14:14,296

So we want to infer not only the position

of the drone based on sensors that we

208

00:14:14,296 --> 00:14:18,937

have, but also how it should act to avoid

an obstacle, for example.

209

00:14:21,966 --> 00:14:22,366

I see.

210

00:14:22,366 --> 00:14:23,387

Yeah, OK, super interesting.

211

00:14:23,387 --> 00:14:30,673

So basically, any case where you have

really high uncertainty, right, that kind

212

00:14:30,673 --> 00:14:35,437

of stuff, OK, yes, super interesting.

213

00:14:35,437 --> 00:14:40,942

And so what prompted you to create a tool

for that?

214

00:14:40,942 --> 00:14:43,684

What inspired you to develop our existing

Forto.jl?

215

00:14:44,125 --> 00:14:49,589

And maybe also tell us how it differs from

traditional Bayesian inference tools.

216

00:14:50,994 --> 00:14:54,656

be it in Python or in R or even in Julia.

217

00:14:54,656 --> 00:15:01,900

If I'm a Julia user, I'm used to use

probabilistic programming language in

218

00:15:01,900 --> 00:15:06,982

Julia, then what's the difference with

RxInfoR?

219

00:15:08,984 --> 00:15:10,284

This is a good question.

220

00:15:10,645 --> 00:15:15,067

But there are two questions in one about

inspiration.

221

00:15:15,067 --> 00:15:19,209

So I joined the bias lab in 2019.

222

00:15:19,926 --> 00:15:23,828

without really understanding what it is

going to be about.

223

00:15:23,828 --> 00:15:27,570

So, but really understanding how difficult

it is really.

224

00:15:28,331 --> 00:15:35,054

So, and the inspiration for me came from

the project that I started my PhD on.

225

00:15:35,675 --> 00:15:42,639

And basically the main inspiration in our

lab is like the so-called the free energy

226

00:15:42,639 --> 00:15:46,721

principle, which kind of tries to explain.

227

00:15:47,318 --> 00:15:51,260

how natural biotic systems behave.

228

00:15:51,681 --> 00:15:51,981

Right.

229

00:15:51,981 --> 00:15:57,745

So, and they basically say they define

so-called Bayesian brain portesies and

230

00:15:57,745 --> 00:15:58,846

pre-energy principles.

231

00:15:58,846 --> 00:16:04,890

So they basically say that any biotic

system, they define a probabilistic model

232

00:16:04,890 --> 00:16:10,453

of its environment and tries to infer the

most optimal course of action to survive

233

00:16:10,654 --> 00:16:11,114

essentially.

234

00:16:11,114 --> 00:16:14,456

But all of this is based on Bayesian

inference as well.

235

00:16:14,456 --> 00:16:15,256

So, right.

236

00:16:15,897 --> 00:16:16,774

At the end.

237

00:16:16,774 --> 00:16:21,636

It kind of, it's a very good idea, but at

the end, it all boils down to the, to the

238

00:16:21,636 --> 00:16:22,876

Bayesian inference.

239

00:16:23,016 --> 00:16:29,819

And basically if you look how biotech

system work, we, we note that there are

240

00:16:29,819 --> 00:16:32,080

very specific properties of this biotech

system.

241

00:16:32,080 --> 00:16:34,741

So they do not consume a lot of power.

242

00:16:35,161 --> 00:16:35,802

Right.

243

00:16:35,802 --> 00:16:42,825

It's actually, it has been proven that our

brain consumes like about 20 Watts of

244

00:16:42,825 --> 00:16:43,945

energy, right.

245

00:16:43,945 --> 00:16:45,158

And it's like an ex.

246

00:16:45,158 --> 00:16:49,799

extremely efficient device, if we can say,

right?

247

00:16:50,440 --> 00:16:53,461

It does not even compare with

supercomputers.

248

00:16:54,102 --> 00:17:00,244

It's also scalable because we live in the

very complex environment with many

249

00:17:00,244 --> 00:17:01,325

variables.

250

00:17:01,845 --> 00:17:04,406

We act in real time, right?

251

00:17:04,406 --> 00:17:08,028

And we are able to adapt to the

environment.

252

00:17:08,028 --> 00:17:11,809

And we are also kind of robust to what is

happening around us, right?

253

00:17:11,809 --> 00:17:12,409

So...

254

00:17:12,414 --> 00:17:18,097

If something new happens, we were able to

adapt to it instead of just failing.

255

00:17:18,097 --> 00:17:18,838

Right.

256

00:17:19,979 --> 00:17:21,560

And this is kind of the idea.

257

00:17:21,560 --> 00:17:27,844

So the inspiration for this Bayesian

inference toolbox that we need to be

258

00:17:27,844 --> 00:17:34,949

scalable, real time, adaptive, robust,

super efficient, and also low power.

259

00:17:35,950 --> 00:17:36,210

Right.

260

00:17:36,210 --> 00:17:40,893

So this is the main ideas behind RX

Inferior project.

261

00:17:42,030 --> 00:17:45,310

And here we go to the second part of the

question.

262

00:17:45,310 --> 00:17:46,571

How does it differ?

263

00:17:46,571 --> 00:17:48,671

Because this is exactly where we differ,

right?

264

00:17:48,671 --> 00:17:54,433

So other solutions in Python or in Julia,

also very cool.

265

00:17:54,433 --> 00:17:59,594

There are actually a lot of cool libraries

for Bayesian inference, but most of them,

266

00:17:59,915 --> 00:18:04,436

they have a different set of trades off or

requirements.

267

00:18:04,436 --> 00:18:08,437

And maybe I will be super clear.

268

00:18:08,437 --> 00:18:11,057

We are not trying to be better.

269

00:18:12,766 --> 00:18:17,229

But we are trying to have a different set

of requirements for the Bayesian different

270

00:18:17,229 --> 00:18:17,709

system.

271

00:18:17,709 --> 00:18:18,429

Yeah.

272

00:18:18,909 --> 00:18:22,271

Yeah, you're working on a different set of

needs, in a way.

273

00:18:22,271 --> 00:18:22,952

Yes, yes.

274

00:18:22,952 --> 00:18:25,593

And it's application-driven.

275

00:18:27,334 --> 00:18:30,515

Yeah, you're trying to address another

type of applications.

276

00:18:31,016 --> 00:18:31,916

Exactly.

277

00:18:32,677 --> 00:18:37,459

And if we directly compare to other

solutions, they are mostly based on

278

00:18:37,640 --> 00:18:41,741

sampling, like HMC or not.

279

00:18:41,934 --> 00:18:46,155

Or maybe they are like black box methods

like a GVI, automatic differential

280

00:18:46,155 --> 00:18:48,035

variation inference or VDI.

281

00:18:48,155 --> 00:18:52,336

And they basically, they are great methods

that they tend to consume a lot of

282

00:18:52,336 --> 00:18:55,097

computational power or like energy, right?

283

00:18:55,097 --> 00:18:57,858

So they do a very expensive simulation.

284

00:18:57,878 --> 00:19:02,979

It may run for maybe hours, maybe even

days in some situations.

285

00:19:03,820 --> 00:19:10,401

And they were great, but you cannot really

apply it in this autonomous systems where

286

00:19:10,401 --> 00:19:11,341

you need to...

287

00:19:11,770 --> 00:19:16,973

Uh, like if we're again talking about

audio, it's like 44 kilohertz.

288

00:19:16,993 --> 00:19:23,657

So we need to really perform Bayesian

inference and extremely fast scale.

289

00:19:23,758 --> 00:19:27,740

And it seems you're not, uh, are not

really applicable in this situation.

290

00:19:27,740 --> 00:19:28,280

So.

291

00:19:32,394 --> 00:19:33,634

Yeah, fascinating.

292

00:19:34,314 --> 00:19:40,217

And you were talking, well, we'll get back

to the computation part a bit later.

293

00:19:40,217 --> 00:19:48,581

Maybe first I'd like to ask you, why did

you do it with Julia?

294

00:19:48,581 --> 00:19:51,242

Why did you choose Julia for RxInfer?

295

00:19:51,322 --> 00:19:56,684

And what advantages does it offer for your

applications of patient inference?

296

00:19:59,986 --> 00:20:04,987

The particular choice of Julia was

actually driven by the needs of the bias

297

00:20:04,987 --> 00:20:10,949

lab in the university because all the

research which we do in the university now

298

00:20:10,949 --> 00:20:16,830

in our lab is done in Julia and that

decision has been made by our professor

299

00:20:16,830 --> 00:20:18,291

many, many years ago.

300

00:20:19,071 --> 00:20:24,372

Interestingly enough, our professor

doesn't really code.

301

00:20:24,372 --> 00:20:26,433

But Julia is a really great language.

302

00:20:26,433 --> 00:20:28,713

So if I would choose myself.

303

00:20:29,190 --> 00:20:31,451

If I, I would still choose Julia.

304

00:20:31,472 --> 00:20:33,453

It's, it's, it's a great language.

305

00:20:33,834 --> 00:20:34,715

It's fast.

306

00:20:34,715 --> 00:20:34,955

Right.

307

00:20:34,955 --> 00:20:38,438

So, and our primary concern is efficiency.

308

00:20:39,139 --> 00:20:42,643

Um, and like Python can also be fast.

309

00:20:42,643 --> 00:20:48,208

Uh, if you like know how to use it, if you

use an MP or like some specialized

310

00:20:48,208 --> 00:20:51,711

libraries, uh, but with July, it's, it's

really easy.

311

00:20:51,711 --> 00:20:52,892

It is easier.

312

00:20:54,998 --> 00:20:57,861

In some situations, of course, you need to

know a bit more.

313

00:20:57,861 --> 00:21:00,183

So my background is in C and C++.

314

00:21:00,183 --> 00:21:04,927

And I understand like how compilers works,

for example.

315

00:21:04,927 --> 00:21:08,510

So maybe for me, it's a bit easier to

write a performance Julia code.

316

00:21:08,510 --> 00:21:14,375

But in general, it's just, it's just

really, it's a nice, fast language.

317

00:21:14,375 --> 00:21:22,221

And it also develops fast in the sense

that new versions of Julia, they,

318

00:21:22,962 --> 00:21:24,903

come up like every several months.

319

00:21:25,423 --> 00:21:28,785

And it really gets better with each

release.

320

00:21:30,627 --> 00:21:35,730

Another thing which is actually very

important for us as well is macros.

321

00:21:35,891 --> 00:21:36,912

Are macros in Julia?

322

00:21:36,912 --> 00:21:43,516

So for people who are listening, so macros

basically allow us to apply arbitrary code

323

00:21:43,516 --> 00:21:46,218

transformations to the existing code.

324

00:21:46,899 --> 00:21:51,181

And it also allows you to create

sublanguage within a language.

325

00:21:51,526 --> 00:21:57,728

And why it is particularly useful for us

is that specifying probabilistic models in

326

00:21:57,728 --> 00:22:02,450

Bayesian inference is a bit hard or

tedious.

327

00:22:02,991 --> 00:22:06,212

We don't want to directly specify these

huge graphs.

328

00:22:06,772 --> 00:22:11,034

And instead, what we did and what Turing

also did and many other libraries in

329

00:22:11,034 --> 00:22:16,577

Julia, they came up with the main specific

language for specifying probabilistic

330

00:22:16,577 --> 00:22:17,457

programs.

331

00:22:17,457 --> 00:22:18,946

And it's extremely cool.

332

00:22:18,946 --> 00:22:24,130

So it's much, much simpler to define a

probabilistic program in Julia than in

333

00:22:24,130 --> 00:22:25,611

Python, in my opinion.

334

00:22:26,653 --> 00:22:29,155

And I really like this feature of Julia.

335

00:22:29,155 --> 00:22:37,023

Yeah, these basically building block

aspect of the Julia language.

336

00:22:37,023 --> 00:22:40,666

Yeah, yeah, I've heard that.

337

00:22:40,666 --> 00:22:44,749

There are other aspects I can mention of

Julia.

338

00:22:45,362 --> 00:22:49,063

By the way, maybe I also can make an

announcement regarding Julia is that the

339

00:22:49,063 --> 00:22:55,726

next Julia the con is happening in I'm

told in the city where I'm currently in.

340

00:22:55,867 --> 00:22:57,627

And it's going to be very cool.

341

00:22:57,927 --> 00:23:01,569

It's going to be in PC stadium in the

football stadium.

342

00:23:01,829 --> 00:23:02,249

Right.

343

00:23:02,249 --> 00:23:06,191

The technical is the technical conference

about programming language is going to be

344

00:23:06,191 --> 00:23:07,292

on the stadium.

345

00:23:07,372 --> 00:23:11,146

So, but so another aspect.

346

00:23:11,146 --> 00:23:15,567

about Julia is this notorious dynamic

multiple dispatch.

347

00:23:15,787 --> 00:23:19,488

And it was extremely useful for us in

particular for reactive message passing

348

00:23:19,488 --> 00:23:20,728

implementation.

349

00:23:20,728 --> 00:23:26,390

Because again, so if we think about how

this reactiveness work and how do we

350

00:23:26,390 --> 00:23:33,412

compute these messages on the graph, in

order to compute the message, we wait for

351

00:23:33,412 --> 00:23:34,332

inputs.

352

00:23:35,132 --> 00:23:40,590

And then when all inputs have arrived, we

have to decide

353

00:23:40,590 --> 00:23:42,250

how to compute the message.

354

00:23:42,491 --> 00:23:46,873

And computation of the message is

essentially solving an integral.

355

00:23:47,253 --> 00:23:54,657

But if we know types of the arguments, and

if we know the type of the node, it might

356

00:23:54,657 --> 00:23:57,138

be that there is an analytical solution to

the message.

357

00:23:57,138 --> 00:24:00,620

So it's not really necessary to solve a

complex integral.

358

00:24:01,941 --> 00:24:05,203

And we do it by multiple dispatch in

Julia.

359

00:24:05,203 --> 00:24:10,045

So multiple dispatch in Julia helps us to

pick the most efficient message update

360

00:24:10,045 --> 00:24:10,758

rule.

361

00:24:10,758 --> 00:24:15,099

on the graph, and it's basically built

into the language.

362

00:24:15,099 --> 00:24:20,760

It's also possible to emulate it in

Python, but in Julia, it's just fast and

363

00:24:20,760 --> 00:24:22,301

built-in, and it works super nice.

364

00:24:22,301 --> 00:24:23,081

No idea.

365

00:24:25,662 --> 00:24:26,782

Yeah, super cool.

366

00:24:27,682 --> 00:24:28,482

Yeah, for sure.

367

00:24:28,482 --> 00:24:29,463

Super interesting points.

368

00:24:29,463 --> 00:24:35,304

And I'm very happy because it's been a

long time since we've had a show with some

369

00:24:35,324 --> 00:24:39,045

Julia practitioners, so that's always very

interesting to hear of what's going on in

370

00:24:39,045 --> 00:24:39,765

that.

371

00:24:39,870 --> 00:24:45,432

in that field and yeah, I would be

convinced just by coming to PSV Eindhoven

372

00:24:45,432 --> 00:24:46,252

Stadium.

373

00:24:46,493 --> 00:24:48,493

You don't have to tell me more.

374

00:24:49,094 --> 00:24:49,514

I'll be there.

375

00:24:49,514 --> 00:24:51,235

Let's do a live show in the stadium.

376

00:24:51,235 --> 00:24:52,295

Yes, I will be there.

377

00:24:52,295 --> 00:24:54,336

Yeah.

378

00:24:55,397 --> 00:24:57,698

Yeah, that sounds like a lot of fun.

379

00:24:59,059 --> 00:25:04,261

And actually, so I'm myself an open source

developer, so I'm very biased to ask you

380

00:25:04,261 --> 00:25:05,461

that question.

381

00:25:05,470 --> 00:25:12,211

What were some of the biggest challenges

you faced when you developed RxInfer?

382

00:25:12,372 --> 00:25:14,392

And how did you overcome them?

383

00:25:14,692 --> 00:25:18,954

I guess that's like the main thing you do

when you're an open source developer is

384

00:25:18,954 --> 00:25:19,414

putting a tire.

385

00:25:19,414 --> 00:25:22,935

This is an amazing question.

386

00:25:22,935 --> 00:25:24,715

I really like it.

387

00:25:24,715 --> 00:25:31,117

So, and I even have like some of the

answers in my PhD dissertation.

388

00:25:31,137 --> 00:25:32,734

And I will probably just go ahead.

389

00:25:32,734 --> 00:25:36,957

I'll probably just quote it, but I don't

remember exactly how I framed it.

390

00:25:36,957 --> 00:25:43,501

But I took it from the book, which is

called, um, uh, software engineering for

391

00:25:43,501 --> 00:25:44,342

science.

392

00:25:44,542 --> 00:25:49,766

So, and basically it says that people

usually underestimate how difficult it is

393

00:25:49,766 --> 00:25:54,809

to create, um, a software in scientific

research area.

394

00:25:54,809 --> 00:26:00,153

Uh, and the main difficulty with that is

that there are no clear guidelines to

395

00:26:00,153 --> 00:26:00,973

follow.

396

00:26:01,134 --> 00:26:06,395

Uh, it's not like designing a website with

clear, like a framework rules and you just

397

00:26:06,395 --> 00:26:09,036

need tasks between like people and team.

398

00:26:09,036 --> 00:26:15,417

No, it's like, um, new insights of

science, like, or like an area where we

399

00:26:15,417 --> 00:26:18,278

work in that they happen every day.

400

00:26:18,278 --> 00:26:19,018

Right.

401

00:26:19,018 --> 00:26:22,720

And the requirements for the software,

they may change every day.

402

00:26:22,720 --> 00:26:29,001

Uh, and it's really hard to like come up

with a specific design before we start

403

00:26:29,001 --> 00:26:30,054

developing because

404

00:26:30,054 --> 00:26:36,700

requirements change over time because you

may create some software for research

405

00:26:36,700 --> 00:26:42,906

purposes and then you found out something

super cool which works better or faster or

406

00:26:42,926 --> 00:26:48,092

scales better and then you realize that

well you actually have to start over

407

00:26:48,092 --> 00:26:54,277

because this is just better we just we

just found out something cooler and

408

00:26:55,270 --> 00:27:01,612

It also means that a developer must invest

time into this research.

409

00:27:01,852 --> 00:27:09,335

So it's not only about coding, like you

should understand how it all works from

410

00:27:09,335 --> 00:27:12,657

the scientific point of view, from a

mathematical point of view.

411

00:27:12,837 --> 00:27:19,679

And sometimes if this is like a cutting

edge research, there are no books about

412

00:27:19,740 --> 00:27:20,500

how it works, right?

413

00:27:20,500 --> 00:27:24,501

So we must invest time in reading papers.

414

00:27:25,170 --> 00:27:30,453

Um, and also being able to write a good

code, which is fast and efficient.

415

00:27:30,793 --> 00:27:35,716

Uh, and all of these problems, they, they

also cured, uh, when we developed our

416

00:27:35,716 --> 00:27:40,179

extinfer, uh, even though I'm the main

author, uh, a lot of people have helped

417

00:27:40,179 --> 00:27:40,619

me, right?

418

00:27:40,619 --> 00:27:43,220

It's like, uh, very thankful for that.

419

00:27:43,220 --> 00:27:49,604

Uh, and for our extinfer in particular,

for my, I also needed to learn a very big

420

00:27:49,604 --> 00:27:52,605

part of statistics because when I joined

the lab,

421

00:27:53,054 --> 00:27:56,777

I actually didn't have a lot of experience

with Bayesian inference and with graphs

422

00:27:56,777 --> 00:27:57,838

and with message passing.

423

00:27:57,838 --> 00:28:00,540

So I really need to dive into this field.

424

00:28:00,540 --> 00:28:04,623

And many people helped me to understand

how it works.

425

00:28:04,823 --> 00:28:09,527

A lot of my colleagues, they have spent

their time explaining.

426

00:28:10,748 --> 00:28:16,433

And even though, right, so we have already

this stack of difficulties at the end or

427

00:28:16,433 --> 00:28:21,537

like maybe not at the end, but the

software that we use, we would like it to

428

00:28:21,537 --> 00:28:22,177

be.

429

00:28:22,598 --> 00:28:25,018

Easy to use, like, or user friendly.

430

00:28:25,819 --> 00:28:29,881

So we already have this difficulties about

we don't know how to design it.

431

00:28:30,181 --> 00:28:32,482

We have to invest time into reading

papers.

432

00:28:32,482 --> 00:28:37,325

But then we at the end, we want to have a

functional software that is easy to use,

433

00:28:37,325 --> 00:28:43,227

addresses different needs and allows you

to find new insights.

434

00:28:43,587 --> 00:28:46,869

So the software should be designed such

that it does not.

435

00:28:48,390 --> 00:28:52,051

impose a lot of constraints on what you

can do with this software, right?

436

00:28:52,051 --> 00:28:59,273

Because scientific software is about

finding new insights, not about like doing

437

00:28:59,273 --> 00:29:01,933

some predefined set of algorithm.

438

00:29:01,933 --> 00:29:04,334

You want to find something new

essentially.

439

00:29:04,994 --> 00:29:10,636

And software should help you with that.

440

00:29:10,636 --> 00:29:12,176

Yeah, yeah, for sure.

441

00:29:12,476 --> 00:29:15,377

That's a good point.

442

00:29:17,018 --> 00:29:27,700

What do you think, what would you say are

the key challenges in achieving

443

00:29:27,800 --> 00:29:34,982

scalability and efficiency in this

endeavor and how does RxInfair address

444

00:29:34,982 --> 00:29:39,083

this?

445

00:29:39,384 --> 00:29:44,245

Basically, we are talking in the context

of Bayesian inference and the key

446

00:29:44,245 --> 00:29:45,325

challenge in

447

00:29:47,066 --> 00:29:49,826

the base rule doesn't scale, right?

448

00:29:49,826 --> 00:29:55,968

It's, the formula looks very simple, but

in practice, then we start working with

449

00:29:55,968 --> 00:29:57,849

large probabilistic models.

450

00:29:58,829 --> 00:30:04,291

Just blind application of base rule

doesn't scale because it has exponential

451

00:30:04,291 --> 00:30:07,252

complexity with respect to the number of

variables.

452

00:30:08,332 --> 00:30:11,933

And Arikson-Ford tries to tackle this

by...

453

00:30:12,138 --> 00:30:16,341

having essentially two main components in

the recipe, like maybe three, let's say

454

00:30:16,341 --> 00:30:17,021

three.

455

00:30:17,021 --> 00:30:21,485

So first of all, we use factor graphs to

specify the model.

456

00:30:21,485 --> 00:30:24,887

So we work with factorized models.

457

00:30:25,748 --> 00:30:32,153

We work with message passing, and message

passing essentially converts the

458

00:30:32,153 --> 00:30:37,597

exponential complexity of the Bayes rule

to linear, but only for highly factorized

459

00:30:37,597 --> 00:30:38,437

models.

460

00:30:39,530 --> 00:30:43,053

And like highly factorized here is a

really crucial component, but many models

461

00:30:43,053 --> 00:30:44,434

are indeed highly factorized.

462

00:30:44,434 --> 00:30:51,020

It's it means that Variables do not

directly depend on all other variables.

463

00:30:51,020 --> 00:30:56,104

They directly depend on maybe a very small

subset of variables in the model.

464

00:30:57,105 --> 00:31:00,227

And the third component here is

variational inference.

465

00:31:00,368 --> 00:31:07,333

So because it allows us to trade off the

computational complexity with accuracy.

466

00:31:07,594 --> 00:31:13,877

So if the task is too difficult or it

doesn't scale, basically what variational

467

00:31:13,877 --> 00:31:22,202

inference gives you is the ability to

impose a set of constraints into your

468

00:31:22,202 --> 00:31:26,164

problem, because it reframes the original

problem as an optimization task.

469

00:31:26,184 --> 00:31:30,427

And we can optimize with up to a certain

constraint.

470

00:31:30,427 --> 00:31:35,769

For example, we may say that this variable

is distributed as a Gaussian distribution.

471

00:31:36,406 --> 00:31:42,671

It may not be true in reality and we lose

some accuracy, but at the end it allows us

472

00:31:42,671 --> 00:31:45,913

to solve some equations faster.

473

00:31:46,735 --> 00:31:51,999

And we can impose more and more

constraints if we don't have enough

474

00:31:51,999 --> 00:31:58,685

computational power and if you have large

model, or we may relax constraints if we

475

00:31:58,685 --> 00:32:02,387

have enough computational power and we

gain accuracy.

476

00:32:02,508 --> 00:32:04,709

So we have this sort of a slider.

477

00:32:05,090 --> 00:32:08,511

which allows us to scale better.

478

00:32:08,511 --> 00:32:10,932

But here's the thing, right?

479

00:32:11,992 --> 00:32:17,535

We always can come up with such a large

model with so many variables and so

480

00:32:18,015 --> 00:32:22,537

difficult relationships between variables

where it still will not scale.

481

00:32:22,857 --> 00:32:24,097

And this is fine.

482

00:32:25,838 --> 00:32:31,841

But Alexin Fur tries to push this boundary

for like scaling Bayesian inference to

483

00:32:31,841 --> 00:32:33,021

large models.

484

00:32:35,942 --> 00:32:43,805

And actually, so you're using variational

inference quite a lot in this endeavor,

485

00:32:43,805 --> 00:32:44,905

right?

486

00:32:44,905 --> 00:32:53,529

So actually, can you discuss the role of

variational inference here in RxInfer and

487

00:32:53,529 --> 00:32:58,191

maybe any innovations that you've

incorporated in this area?

488

00:32:58,191 --> 00:33:04,753

So the role I kind of touched upon a

little bit is that it acts as like a

489

00:33:04,753 --> 00:33:05,458

slider.

490

00:33:05,458 --> 00:33:06,098

Right.

491

00:33:06,098 --> 00:33:12,563

In in the controlling the complexity and

the accuracy of your inference result.

492

00:33:13,324 --> 00:33:17,467

This is the main role.

493

00:33:17,588 --> 00:33:21,110

Of course, for some applications, this

might be undesirable.

494

00:33:21,691 --> 00:33:26,875

For some applications, you may want to

have a perfect posterior estimation.

495

00:33:27,636 --> 00:33:31,239

But for some applications, it's not a very

big deal.

496

00:33:31,239 --> 00:33:34,761

Again, we are talking about different

needs for different application.

497

00:33:35,050 --> 00:33:35,770

here.

498

00:33:36,491 --> 00:33:42,254

And the innovation that RX and Fer brings,

I think it's like one of the few

499

00:33:42,295 --> 00:33:47,579

implementation as message passing, like

variational inference as message passing,

500

00:33:47,579 --> 00:33:53,903

because it's usually implemented as like

black box method that takes a function

501

00:33:53,903 --> 00:33:58,927

like a probabilistic model function and

maybe does some automatic differentiation

502

00:33:58,927 --> 00:34:01,708

or some extra sampling under the hood.

503

00:34:03,770 --> 00:34:10,071

And message passing by itself has a very

long history, but I think people

504

00:34:10,071 --> 00:34:15,973

mistakenly think that it's quite limited

to like some product algorithm.

505

00:34:15,973 --> 00:34:23,575

But actually, variational inference can

also be implemented as message passing.

506

00:34:23,575 --> 00:34:24,356

And it's quite good.

507

00:34:24,356 --> 00:34:29,157

So it opens the applicability of the

message passing algorithms.

508

00:34:30,137 --> 00:34:31,237

And also.

509

00:34:31,750 --> 00:34:37,213

As we already talked a little bit about

this reactive nature of the inference

510

00:34:37,213 --> 00:34:42,577

procedure, so it's also maybe even the

first reactive variational inference

511

00:34:42,577 --> 00:34:47,380

engine, which is designed to work with

infinite data streams.

512

00:34:47,441 --> 00:34:52,344

So it continuously updates this posterior

continuously does minimization.

513

00:34:52,945 --> 00:34:54,205

It does not stop.

514

00:34:54,646 --> 00:35:00,129

And as soon as new data arrive, we

basically update our posteriors.

515

00:35:00,466 --> 00:35:08,328

But in between this kind of data windows,

we can spend more computational resources

516

00:35:08,328 --> 00:35:13,669

to find better approximation for the

variational inference.

517

00:35:15,130 --> 00:35:23,032

But yeah, but all other solutions, let's

say that are also variational inference,

518

00:35:23,232 --> 00:35:27,193

they basically require you to, yeah.

519

00:35:27,726 --> 00:35:31,649

to wait for the data, then feed to the

data, or wait for the entire data set,

520

00:35:31,649 --> 00:35:36,172

feed the data set, and then you have the

result, then you analyze the result, and

521

00:35:36,172 --> 00:35:37,393

then you repeat.

522

00:35:37,573 --> 00:35:44,078

So RxInfoR works a bit differently in that

regard.

523

00:35:44,078 --> 00:35:44,258

Yeah.

524

00:35:44,258 --> 00:35:44,919

Fascinating.

525

00:35:44,919 --> 00:35:51,804

And that, I'm guessing you have some

examples of that up in the RxInfoR

526

00:35:52,404 --> 00:35:53,965

website, maybe we can...

527

00:35:53,994 --> 00:36:00,140

a link to that in the shows for people who

are interested to see how you would apply

528

00:36:00,140 --> 00:36:02,001

that in practice?

529

00:36:03,723 --> 00:36:06,545

So I,

530

00:36:19,638 --> 00:36:24,539

So it does not really require reactivity,

but because it's kind of like easy to use

531

00:36:24,539 --> 00:36:33,041

and fast, students can do some homework

for signal processing applications.

532

00:36:35,342 --> 00:36:40,023

What I already mentioned is that we work

with audio signals and with control

533

00:36:40,023 --> 00:36:41,244

applications.

534

00:36:41,624 --> 00:36:47,685

I don't really have a particular example

if our sensor is being used in the field.

535

00:36:48,142 --> 00:36:49,923

or by an industry.

536

00:36:51,564 --> 00:36:56,788

So it's primarily our research tool

currently, but we want to extend it.

537

00:36:56,788 --> 00:37:01,551

So it's still a bit more difficult to use

than Turing, let's say.

538

00:37:01,831 --> 00:37:07,676

Turing, which is also written in Julia,

because yeah, message passing is a bit

539

00:37:07,676 --> 00:37:14,320

maybe more difficult to use and it is not

that universal as HMC and NUTS still

540

00:37:14,320 --> 00:37:16,461

require some approximation methods.

541

00:37:16,974 --> 00:37:18,014

Yeah.

542

00:37:18,014 --> 00:37:21,916

So we still use it as a research tool

currently, but we have some ideas in the

543

00:37:21,916 --> 00:37:29,439

lab, how to expand the available set of

probabilistic models we can run an

544

00:37:29,439 --> 00:37:30,979

inference on.

545

00:37:33,701 --> 00:37:39,243

And yes, indeed, on our documentation, we

have quite a lot of examples where we can

546

00:37:39,243 --> 00:37:45,325

use, but these examples, they are, I would

say, educational in most of the cases.

547

00:37:45,450 --> 00:37:47,210

at least in the documentation.

548

00:37:49,331 --> 00:37:54,774

So we are at this stage where we have a

lot of ideas how we can improve the

549

00:37:54,774 --> 00:38:00,496

inference, how we make it faster, such

that we can actually apply it for real

550

00:38:00,496 --> 00:38:06,219

tasks, like for real drones, for real

robots, to make a real speech, like the

551

00:38:06,219 --> 00:38:10,881

noise or something similar.

552

00:38:10,881 --> 00:38:13,301

Yeah, definitely said.

553

00:38:14,102 --> 00:38:20,365

That would be super interesting, I'm

guessing, for people who are into these

554

00:38:20,365 --> 00:38:21,866

and also just want to check out.

555

00:38:21,866 --> 00:38:30,551

I have been checking out your website

recently to prepare for the episode.

556

00:38:30,551 --> 00:38:32,431

Actually, can you now...

557

00:38:32,872 --> 00:38:40,256

So you've shared some, like the overview

of the theory, how that works, what

558

00:38:40,256 --> 00:38:43,257

RxInfer does in that regard.

559

00:38:43,466 --> 00:38:47,508

Can you share what you folks are doing

with Lazy Dynamics, how that's related to

560

00:38:47,508 --> 00:38:49,089

that?

561

00:38:49,089 --> 00:38:52,971

How does that fit into this ecosystem?

562

00:38:54,532 --> 00:39:01,457

So yeah, Lazy Dynamics, we created this

company to commercialize the research that

563

00:39:01,457 --> 00:39:07,200

we do at our lab to basically find funding

to make our extrovert better and ready for

564

00:39:07,200 --> 00:39:07,981

industry.

565

00:39:07,981 --> 00:39:09,881

Because currently, let's say,

566

00:39:10,634 --> 00:39:14,717

Ericsson is a great research tool for our

purposes, right?

567

00:39:14,717 --> 00:39:20,042

But industry needs some more properties to

the addition that I have already

568

00:39:20,042 --> 00:39:21,043

mentioned.

569

00:39:21,643 --> 00:39:21,884

Right?

570

00:39:21,884 --> 00:39:27,889

For example, indeed the Bayesian inference

engine must be extremely robust, right?

571

00:39:27,889 --> 00:39:31,512

It does not allow to fail if we really

work in the field.

572

00:39:31,552 --> 00:39:33,974

And this is not really a research

question.

573

00:39:34,515 --> 00:39:38,337

It's more about like implementational

side.

574

00:39:38,386 --> 00:39:38,686

Right.

575

00:39:38,686 --> 00:39:44,271

It's like a good goal to good code

coverage, like great documentation.

576

00:39:44,732 --> 00:39:48,355

And this is what we kind of also want to

do with lazy dynamics.

577

00:39:48,355 --> 00:39:54,521

We want to take this next step and want to

create a great product for other

578

00:39:54,521 --> 00:39:59,586

companies, especially that can rely on Rx

and Fur in the maybe in their research or

579

00:39:59,586 --> 00:40:01,488

maybe even in the field.

580

00:40:02,569 --> 00:40:03,289

Right.

581

00:40:03,694 --> 00:40:10,237

And maybe we create some sort of a tools,

a tool set around RxInfer that will allow

582

00:40:10,237 --> 00:40:15,660

you to maybe debug the performance of your

probabilistic problem or your

583

00:40:15,660 --> 00:40:17,501

probabilistic inference, right?

584

00:40:17,501 --> 00:40:19,542

It's also not about research.

585

00:40:19,962 --> 00:40:26,506

It's about like having it more accessible

to other people, like finding bugs or

586

00:40:26,506 --> 00:40:31,489

mistakes in their model specification,

make it easier to use.

587

00:40:31,489 --> 00:40:33,038

Or maybe, for example, we could.

588

00:40:33,038 --> 00:40:39,000

come up with some sort of a library of

models, right?

589

00:40:39,000 --> 00:40:44,982

So you would want to build some autonomous

system and it may require a model for

590

00:40:45,403 --> 00:40:49,704

audio recognition, it may require a model

for video recognition.

591

00:40:49,704 --> 00:40:54,866

And this kind of set of models, they can

be predefined, very well tested, have a

592

00:40:54,866 --> 00:40:57,127

great performance, super robust.

593

00:40:57,167 --> 00:41:01,809

And basically Lazy Dynamics may provide an

access to this kind of a library.

594

00:41:03,071 --> 00:41:03,814

right?

595

00:41:06,650 --> 00:41:15,018

So, and for this kind of, because this is

not a research related questions, it's, it

596

00:41:15,018 --> 00:41:21,084

must be done in a company with like a very

good programmers and very good code

597

00:41:21,084 --> 00:41:22,805

coverage and documentation.

598

00:41:22,805 --> 00:41:26,269

But for research purposes, Ericsson-Fer is

already a great toolbox.

599

00:41:26,269 --> 00:41:30,693

And basically many students in our lab,

they already use it.

600

00:41:30,733 --> 00:41:31,354

But.

601

00:41:31,354 --> 00:41:35,235

Yeah, because we are all sitting in the

same room, let's say on the same floor, we

602

00:41:35,235 --> 00:41:42,259

can kind of brainstorm, find bugs, fix it

on the fly and they keep working that.

603

00:41:42,259 --> 00:41:47,301

But if we want Rx, for Rxinfer to be used

in industry, it really needs to be a

604

00:41:47,301 --> 00:41:53,704

professional toolbox with like a

professional support.

605

00:41:53,704 --> 00:41:54,365

Yeah.

606

00:41:54,365 --> 00:41:56,005

Yeah, I understand that makes sense.

607

00:41:56,798 --> 00:42:02,300

Surprised you can, I don't know when you

sleep though, between the postdoc, the

608

00:42:02,300 --> 00:42:04,241

open source project and the company.

609

00:42:06,502 --> 00:42:16,007

So yeah, it's a great comment, but yeah,

it's hard.

610

00:42:16,007 --> 00:42:19,429

Yeah, hopefully we'll get you some sleep

in the coming months.

611

00:42:20,930 --> 00:42:24,933

To get back to your PhD project, because I

found that very interesting.

612

00:42:24,933 --> 00:42:28,256

So your dissertation will be in the show

notes.

613

00:42:29,517 --> 00:42:35,543

But something I was also curious about is

that in this PhD project, you explore

614

00:42:35,543 --> 00:42:38,626

different trade-offs for Bayesian

inference architecture.

615

00:42:38,626 --> 00:42:42,670

And you've mentioned that a bit already a

bit earlier, but I'm really curious about

616

00:42:42,670 --> 00:42:42,910

that.

617

00:42:42,910 --> 00:42:47,393

So could you elaborate on these trade-offs

and why they are significant?

618

00:42:48,598 --> 00:42:52,819

Yes, we already touched a little bit about

that.

619

00:42:52,819 --> 00:43:00,821

So the main trade-offs here are kind of

computational load, efficiency,

620

00:43:00,901 --> 00:43:06,762

adaptivity, high power consumption, magic.

621

00:43:06,922 --> 00:43:07,662

Yeah.

622

00:43:08,323 --> 00:43:13,044

And another aspect actually, which we

didn't talk about yet is structural model

623

00:43:13,044 --> 00:43:14,104

adaptation.

624

00:43:14,244 --> 00:43:18,685

So this is the requirements that we are

favor.

625

00:43:18,882 --> 00:43:20,082

in the Ricks Center.

626

00:43:20,082 --> 00:43:25,405

And this has the requirements that were

like central to my PhD project.

627

00:43:26,526 --> 00:43:30,388

And this all arises, all of these

properties, they are not just coming from

628

00:43:30,388 --> 00:43:31,329

a vacuum.

629

00:43:31,329 --> 00:43:35,691

They are coming from real time signal

processing applications on autonomous

630

00:43:35,691 --> 00:43:36,571

systems.

631

00:43:37,672 --> 00:43:40,093

We don't have a lot of battery power.

632

00:43:40,093 --> 00:43:46,077

We don't have a very powerful CPUs on this

autonomous devices, because essentially

633

00:43:46,077 --> 00:43:47,906

what we want to do also is that

634

00:43:47,906 --> 00:43:54,030

We want to be able to run a very

difficult, large probabilistic models on

635

00:43:54,030 --> 00:43:54,811

the Raspberry Pi.

636

00:43:54,811 --> 00:43:58,833

And Raspberry Pi doesn't even have a GPU.

637

00:44:00,575 --> 00:44:06,980

So we can buy some small sort of a GPU and

put it on the Raspberry Pi.

638

00:44:06,980 --> 00:44:14,285

But still, the computational capabilities

are very, very limited on edge devices.

639

00:44:15,158 --> 00:44:21,799

For example, one may say, let's just do

everything in the cloud, which is a very

640

00:44:21,799 --> 00:44:22,980

valid argument, actually.

641

00:44:22,980 --> 00:44:31,942

But we also, in some situations, the

latencies are just too big.

642

00:44:31,942 --> 00:44:36,564

And also, maybe we don't have access to

the internet in some areas, but we still

643

00:44:36,564 --> 00:44:41,805

want to create these adaptive Bayesian

inference systems like a drone that they

644

00:44:41,805 --> 00:44:42,462

may...

645

00:44:42,462 --> 00:44:46,643

explore some area maybe in the mountain or

something where we don't really have an

646

00:44:46,643 --> 00:44:50,265

internet so we cannot really process

anything in the cloud.

647

00:44:52,506 --> 00:44:55,667

So it must work as efficient as possible.

648

00:44:57,047 --> 00:45:01,909

On a very, very small device that doesn't

have a lot of power doesn't have a lot of

649

00:45:01,909 --> 00:45:05,511

battery and still this should work in real

time.

650

00:45:07,832 --> 00:45:12,153

Yeah, I think, I think this is mostly the

main trades of and

651

00:45:12,762 --> 00:45:17,405

In terms of how we do it, we use this

variational inference and we sacrifice

652

00:45:17,405 --> 00:45:19,887

accuracy with respect to scalability.

653

00:45:19,887 --> 00:45:26,311

Reactive message passing allows us to

scale to a very large models because it

654

00:45:26,311 --> 00:45:29,573

works on Factor graphs.

655

00:45:29,934 --> 00:45:30,054

Yeah.

656

00:45:30,054 --> 00:45:33,877

And I think that's, these are very

important points to make, right?

657

00:45:33,877 --> 00:45:40,761

Because always when you work and you build

an open source,

658

00:45:41,174 --> 00:45:44,896

package you have to trade off to make.

659

00:45:44,916 --> 00:45:54,142

So that means you have to choose whether

you're going to a general package or a

660

00:45:54,142 --> 00:45:55,323

more specified one.

661

00:45:55,323 --> 00:45:58,525

And that will dictate in a way your trade

off.

662

00:45:58,966 --> 00:46:05,130

In RxInfer, it seems like you're quite

specified, specialist of message passing

663

00:46:05,130 --> 00:46:05,930

inference.

664

00:46:05,930 --> 00:46:08,271

So the cool thing here is that I'm

665

00:46:11,058 --> 00:46:15,501

choices because you're like, no, our main

use case is that.

666

00:46:15,501 --> 00:46:17,183

And so we can use that.

667

00:46:17,183 --> 00:46:22,287

And the devirational inference choice, for

instance, is quite telling because in your

668

00:46:22,287 --> 00:46:28,573

case, it seems to be really working well,

whereas we could not do that in PMC, for

669

00:46:28,573 --> 00:46:28,913

instance.

670

00:46:28,913 --> 00:46:34,978

If we remove the ability to use HMC, we

would have quite a drop in the user

671

00:46:34,978 --> 00:46:35,839

numbers.

672

00:46:35,919 --> 00:46:39,081

So yeah, that's always something I'm.

673

00:46:39,118 --> 00:46:43,780

Try to make people aware of when they are

using open source packages.

674

00:46:44,221 --> 00:46:45,582

You can do everything.

675

00:46:45,862 --> 00:46:47,083

Yeah, exactly.

676

00:46:47,083 --> 00:46:48,063

Exactly.

677

00:46:48,084 --> 00:46:55,909

So I actually really, when I have a need,

I really enjoy working with like HMC or

678

00:46:55,909 --> 00:46:59,891

NAT based methods because they just work,

just like magic.

679

00:47:00,632 --> 00:47:05,355

And, but, and here's the trade off, right?

680

00:47:05,355 --> 00:47:09,142

They work magically in many situations.

681

00:47:09,142 --> 00:47:11,323

But they're slow in some sense.

682

00:47:11,323 --> 00:47:17,287

Let's say they're not slow, but they're

slower than a message button.

683

00:47:17,808 --> 00:47:19,529

So here is this trade-off.

684

00:47:19,529 --> 00:47:24,793

So user friendliness is really, really

important key in this equation.

685

00:47:24,793 --> 00:47:31,277

Yeah, and what do you call user

friendliness in your case?

686

00:47:31,734 --> 00:47:37,198

So what I refer to user friendliness here

is that a user can specify a model, press

687

00:47:37,198 --> 00:47:41,361

a button with HMC and it just runs and the

user gets a result.

688

00:47:41,482 --> 00:47:44,263

Yes, a user needs to wait a little bit

more.

689

00:47:44,724 --> 00:47:47,886

But anyway, like user experience is great.

690

00:47:48,087 --> 00:47:52,250

Just specify a model, just run inference,

just get your result.

691

00:47:53,011 --> 00:48:01,157

With RxInfer, it's a bit less easier

because in most of the cases,

692

00:48:03,330 --> 00:48:07,092

uh, message passing works like that, that

it favors like analytical solutions on the

693

00:48:07,092 --> 00:48:07,693

graph.

694

00:48:07,693 --> 00:48:13,316

And if analytical solution for a message

is not available, uh, basically a user

695

00:48:13,316 --> 00:48:15,337

must specify an approximation method.

696

00:48:15,337 --> 00:48:20,580

Uh, it actually also can be HMC, uh, just

in case.

697

00:48:20,580 --> 00:48:27,383

Uh, but still our X and four does not

really specify a default approximation

698

00:48:27,383 --> 00:48:27,724

method.

699

00:48:27,724 --> 00:48:28,644

Currently,

700

00:48:31,534 --> 00:48:38,435

fine default approximation, but because it

does not define it currently, if a user

701

00:48:38,435 --> 00:48:43,077

specifies a complex probabilistic model,

it will probably throw an error saying

702

00:48:43,077 --> 00:48:48,338

that, okay, I don't know how to solve it,

please specify what should I do here and

703

00:48:48,338 --> 00:48:49,138

there.

704

00:48:49,678 --> 00:48:56,160

And for a new user, it might be a bit

unintuitive how to do that, what to

705

00:48:56,160 --> 00:48:57,480

specify.

706

00:48:57,961 --> 00:49:01,261

So for HMC, there's no need to do it, it

just works.

707

00:49:01,994 --> 00:49:05,516

But if RxInfer, it's not that easy yet.

708

00:49:05,917 --> 00:49:12,060

That's what I was referring to,

user-friendliness.

709

00:49:12,461 --> 00:49:13,181

Yeah, that makes sense.

710

00:49:13,181 --> 00:49:18,985

And again, here, the interesting thing is

that the definition of user-friendliness

711

00:49:18,985 --> 00:49:22,488

is going to depend on what you're trying

to optimize, right?

712

00:49:22,488 --> 00:49:24,569

What kind of use case you're trying to

optimize on.

713

00:49:24,569 --> 00:49:24,649

Yes.

714

00:49:24,649 --> 00:49:31,513

Actually, what's the future for RxInfer?

715

00:49:31,558 --> 00:49:36,601

What are the future developments or

enhancements that you are planning?

716

00:49:36,601 --> 00:49:44,667

So, we have already touched a little bit

about like Lazy Dynamics side, which tries

717

00:49:44,667 --> 00:49:49,770

to make a really, like a commercial

product out of the person, where we have

718

00:49:49,770 --> 00:49:51,131

great support.

719

00:49:51,131 --> 00:49:55,554

This is one side of the future, but we

also have a research side of the project.

720

00:49:56,174 --> 00:50:01,174

And research side of the project includes

structural model adaptation.

721

00:50:01,174 --> 00:50:03,774

We just, uh, which in my opinion is quite

cool.

722

00:50:03,775 --> 00:50:09,817

So what it basically means in a few words

is that we, we may be able in the future

723

00:50:09,817 --> 00:50:14,119

to change the structure of the model on

the fly without stopping the inference

724

00:50:14,119 --> 00:50:21,122

procedure and you may need it for several

reasons, for example, uh, computational

725

00:50:21,122 --> 00:50:26,004

power, uh, computational budget change,

and we are not longer able, we are no

726

00:50:26,004 --> 00:50:28,705

longer able to run inference.

727

00:50:28,930 --> 00:50:30,511

on such a complex model.

728

00:50:30,511 --> 00:50:32,892

So we want to reduce the complexity of the

model.

729

00:50:32,892 --> 00:50:40,397

We want to change the structure, maybe put

some less demanding factor nodes.

730

00:50:41,198 --> 00:50:42,519

And we want to do it on the fly.

731

00:50:42,519 --> 00:50:46,541

We want actually stopping the inference

because for like sampling based methods,

732

00:50:46,541 --> 00:50:51,805

if we change the model, we basically are

forced to restart because we have this

733

00:50:51,805 --> 00:50:57,049

change and it's quite difficult to reduce

the previous result if the structure of

734

00:50:57,049 --> 00:50:58,069

the model change.

735

00:50:58,678 --> 00:51:00,659

graphs, it's actually possible.

736

00:51:01,380 --> 00:51:10,467

So another point why we would need that in

the field is that if you could imagine

737

00:51:10,867 --> 00:51:15,031

different sensors, so we have different

observations, and one sensor all of a

738

00:51:15,031 --> 00:51:20,375

sudden just burned out, or glitched, or

something like that.

739

00:51:20,375 --> 00:51:24,998

So essentially, we are not longer having

this sort of observation.

740

00:51:25,279 --> 00:51:28,494

So we need to change the structure of our

model

741

00:51:28,494 --> 00:51:32,995

to account for this glitch or breakage of

the sensor.

742

00:51:33,755 --> 00:51:38,596

And this is also where reactive message

passing helps us because we basically,

743

00:51:38,596 --> 00:51:44,058

because we do not enforce the particular

order of updates, we stop reacting on this

744

00:51:44,058 --> 00:51:46,638

observation because it's no longer

available.

745

00:51:46,838 --> 00:51:52,900

And we also change the structure of the

model to account for that.

746

00:51:53,720 --> 00:51:58,641

Another thing for the future of RxN4 in

terms of research is that we want to be

747

00:51:59,078 --> 00:52:03,260

to support natively different update rates

for different variables.

748

00:52:03,961 --> 00:52:12,066

And so what I mean by that is that if you

imagine an audio recognition system, let's

749

00:52:12,066 --> 00:52:17,309

say, or audio enhancement system, let's

say, and you have you modeled the

750

00:52:17,309 --> 00:52:22,693

environment of like a person who is

talking around several persons and let's

751

00:52:22,693 --> 00:52:24,513

say their speech signal.

752

00:52:24,574 --> 00:52:29,898

arise at the rate of like 44 kilohertz if

we are talking about a typical microphone.

753

00:52:29,918 --> 00:52:35,583

But their environment, where are they

currently sitting, doesn't really change

754

00:52:35,583 --> 00:52:43,089

that fast because they may sit in a bar

and it will be a bar an hour later.

755

00:52:43,530 --> 00:52:48,513

So there's no need to infer this

information that often as their speech.

756

00:52:49,366 --> 00:52:50,946

So it changes very rarely.

757

00:52:50,946 --> 00:52:56,048

So we have a different set of variables

that may change at different scales.

758

00:52:56,468 --> 00:53:00,110

And we want also to support this natively

in RxInfer.

759

00:53:00,110 --> 00:53:05,152

So we can also make it easier for the

inference engine.

760

00:53:05,152 --> 00:53:09,653

So it does not spend computational

resources on variables, which are not

761

00:53:09,653 --> 00:53:10,913

updating fast.

762

00:53:13,662 --> 00:53:18,546

We want to be able to support

non-parametric models in Rx and FUR.

763

00:53:19,327 --> 00:53:21,949

And this includes like Gaussian processes.

764

00:53:23,471 --> 00:53:27,614

And we have a research, so currently we

have a PhD student in our lab who is

765

00:53:27,614 --> 00:53:30,436

working a lot on that and he has a great

progress.

766

00:53:30,536 --> 00:53:34,820

It's not available in the current version

of Rx and FUR, but he has like experiments

767

00:53:34,820 --> 00:53:36,381

and it works all nicely.

768

00:53:36,381 --> 00:53:40,104

At some point it will be integrated into

the public version.

769

00:53:41,185 --> 00:53:41,885

And...

770

00:53:42,686 --> 00:53:47,387

Yeah, and it just, you know, just

maintenance and fixing bugs and this kind

771

00:53:47,387 --> 00:53:49,288

of stuff, improving the documentation.

772

00:53:49,288 --> 00:53:58,170

So the documentation currently needs

improvement because we have quite some

773

00:53:58,430 --> 00:54:02,231

features and additions that we have

already integrated into the framework and

774

00:54:02,231 --> 00:54:05,912

we happily use them ourselves in our lab

for our research.

775

00:54:06,233 --> 00:54:09,553

But it's like maybe poorly documented,

let's say.

776

00:54:09,738 --> 00:54:15,601

So other people in theory can use this

functionality, but because they cannot go

777

00:54:15,601 --> 00:54:19,963

to my table in the office in the Einhorn

University of Technology, they cannot ask

778

00:54:19,963 --> 00:54:21,204

how to use it properly.

779

00:54:21,204 --> 00:54:25,126

So we should just put it into

documentation and so other people can use

780

00:54:25,126 --> 00:54:25,586

that as well.

781

00:54:25,586 --> 00:54:30,409

Yeah, yeah.

782

00:54:30,409 --> 00:54:30,669

Yeah.

783

00:54:30,669 --> 00:54:31,189

That makes sense.

784

00:54:31,189 --> 00:54:35,051

That's a nice roadmap for this year.

785

00:54:35,672 --> 00:54:39,333

And looking ahead, what's...

786

00:54:39,890 --> 00:54:44,833

your, you know, what's your vision, let's

say, for the future of automated patient

787

00:54:44,833 --> 00:54:51,597

inference in the way you do it, especially

in complex models like yours.

788

00:54:52,438 --> 00:54:54,739

Yeah, what's your vision about that?

789

00:54:54,739 --> 00:54:56,721

What would you like to see in the coming

years?

790

00:54:56,721 --> 00:55:00,703

Also, what would you like to not see?

791

00:55:00,703 --> 00:55:01,304

A good question.

792

00:55:01,304 --> 00:55:04,245

So in my opinion, the future is very

bright.

793

00:55:04,298 --> 00:55:10,560

the future of automated vision and like a

lot of great people working on this and

794

00:55:10,560 --> 00:55:13,381

start to work on that more people are

coming.

795

00:55:13,422 --> 00:55:13,662

Right.

796

00:55:13,662 --> 00:55:19,985

So so many toolboxes in Python and Julia,

like I am see cheering Julia in our there

797

00:55:19,985 --> 00:55:22,185

are like in C plus 10.

798

00:55:22,566 --> 00:55:30,009

So, so many implementations and it's only

getting better every year.

799

00:55:30,569 --> 00:55:31,126

Right.

800

00:55:31,126 --> 00:55:37,091

But I think in my opinion, the future is

that there will be several applications,

801

00:55:37,091 --> 00:55:41,554

like in our case, this autonomous systems

or maybe something else.

802

00:55:41,554 --> 00:55:46,718

And this packages, they will basically not

really compete.

803

00:55:47,039 --> 00:55:54,465

But in a sense, they will, like for

different applications, you will choose a

804

00:55:54,465 --> 00:55:58,728

different solution because all of them

will be kind of great in their own

805

00:55:58,728 --> 00:55:59,889

application.

806

00:56:00,566 --> 00:56:05,827

But I'm not sure if there will be like a

super ultra cool method that solves all

807

00:56:05,827 --> 00:56:08,688

problems of all applications in Bayesian

inference.

808

00:56:08,688 --> 00:56:11,988

And maybe we'll have who knows.

809

00:56:12,269 --> 00:56:17,210

But in my opinion, there will be always

this trades of trades of in different

810

00:56:17,210 --> 00:56:21,471

applications and we'll just have we'll use

different methodologies.

811

00:56:23,192 --> 00:56:24,632

Yeah.

812

00:56:26,873 --> 00:56:29,293

Yeah, that makes sense in.

813

00:56:29,293 --> 00:56:30,233

In a way.

814

00:56:31,066 --> 00:56:36,048

I like your point here, but all these

different methods cooperating in a way

815

00:56:36,048 --> 00:56:41,751

because they are addressing different

workflows or different use cases.

816

00:56:41,892 --> 00:56:48,175

So yeah, definitely I think we'll have

stuff to learn from one type of

817

00:56:48,175 --> 00:56:50,637

application to the other.

818

00:56:50,637 --> 00:56:57,240

I like this analogy of like, no, we don't

cut the bread with a fork.

819

00:56:57,280 --> 00:56:59,781

But it doesn't really make a fork a

useless tool.

820

00:56:59,878 --> 00:57:05,441

I mean, we can use a fork for something

else and we are not eating a soup with a

821

00:57:05,441 --> 00:57:07,863

knife, but it doesn't make knife a useless

tool.

822

00:57:07,863 --> 00:57:11,445

So these are tools that are great, but for

their own purposes.

823

00:57:11,666 --> 00:57:17,209

So Alexin Fur is like a good tool for like

real time signal process application.

824

00:57:17,509 --> 00:57:21,572

And Turing and Julia is like a great tool

for other applications.

825

00:57:21,572 --> 00:57:26,155

So we'll just live together and learn from

each other.

826

00:57:26,155 --> 00:57:26,955

Yeah.

827

00:57:27,016 --> 00:57:27,656

Fascinating.

828

00:57:27,656 --> 00:57:29,277

I really love that.

829

00:57:29,802 --> 00:57:35,385

And well, before closing up the show,

because I don't want to take too much time

830

00:57:35,385 --> 00:57:41,168

with you, but do you have any question I

really like asking from time to time is if

831

00:57:41,168 --> 00:57:45,871

you have any favorite type of model that

you always like to use and you want to

832

00:57:45,871 --> 00:57:47,232

share with listeners?

833

00:57:48,413 --> 00:57:51,735

You mean probabilistic model?

834

00:57:51,735 --> 00:57:55,037

Sure, or it can be a different model for

sure.

835

00:57:55,037 --> 00:57:57,117

But yeah, probabilistic model.

836

00:57:57,762 --> 00:58:02,566

I actually, yeah, I mentioned a little bit

that I do not really work from application

837

00:58:02,566 --> 00:58:03,706

point of view.

838

00:58:03,807 --> 00:58:08,310

I really work on the compiler for Bayesian

inference.

839

00:58:08,310 --> 00:58:12,313

So I don't really have a favorite model,

let's say.

840

00:58:12,714 --> 00:58:15,416

It's hard to say.

841

00:58:15,416 --> 00:58:19,579

Yeah, that's interesting because basically

you work, that's always an interesting

842

00:58:19,579 --> 00:58:25,384

position to me because you really work on

the, basically making the modeling

843

00:58:25,384 --> 00:58:26,945

possible, but usually

844

00:58:27,678 --> 00:58:31,199

one of the people using that modeling

platform yourself.

845

00:58:31,359 --> 00:58:31,839

Exactly.

846

00:58:31,839 --> 00:58:32,360

Yes.

847

00:58:32,360 --> 00:58:34,861

Yeah.

848

00:58:34,861 --> 00:58:37,141

That's always something really fascinating

to me.

849

00:58:37,162 --> 00:58:44,585

Because me, I'm kind of on the bridge, but

a bit more to the applied modeling side of

850

00:58:44,585 --> 00:58:45,365

things.

851

00:58:45,385 --> 00:58:50,507

So I'm really happy that there are people

like you who make my life easier and even

852

00:58:50,507 --> 00:58:51,447

possible.

853

00:58:51,607 --> 00:58:53,008

So thank you so much.

854

00:58:53,748 --> 00:58:56,529

That's cool.

855

00:58:56,529 --> 00:58:57,038

Awesome.

856

00:58:57,038 --> 00:58:59,438

Dmitri, that was super cool.

857

00:58:59,558 --> 00:59:00,718

Thanks a lot.

858

00:59:01,359 --> 00:59:05,220

Before letting you go, though, as usual,

I'm going to ask you the last two

859

00:59:05,220 --> 00:59:06,180

questions.

860

00:59:06,180 --> 00:59:08,881

I ask every guest at the end of the show.

861

00:59:09,401 --> 00:59:13,262

First one, if you had unlimited time and

resources, which problem would you try to

862

00:59:13,262 --> 00:59:15,003

solve?

863

00:59:15,863 --> 00:59:18,184

Yes, I thought about this question.

864

00:59:18,184 --> 00:59:20,564

It's kind of an interesting one.

865

00:59:21,665 --> 00:59:24,525

And I thought it would be cool.

866

00:59:24,778 --> 00:59:30,243

to have if we have an infinite amount of

time to try to solve some sort of

867

00:59:30,243 --> 00:59:34,807

unsolvable paradox because we already have

a limited time.

868

00:59:34,807 --> 00:59:42,674

So one of the areas which I never worked

with, but I'm really fascinated about is

869

00:59:43,976 --> 00:59:49,922

like astronomy and one of the paradoxes in

astronomy which is kind of

870

00:59:49,922 --> 00:59:53,703

I find interesting, but maybe it's not

really a paradox, but anyway, it's like

871

00:59:53,703 --> 01:00:01,687

Fermi paradox, which basically in a few

words, it tries to explain the discrepancy

872

01:00:01,687 --> 01:00:07,489

between the lack of evidence of other

civilizations, even though apparently

873

01:00:07,489 --> 01:00:10,070

there is a high likelihood for its

existence.

874

01:00:10,070 --> 01:00:10,270

Right?

875

01:00:10,270 --> 01:00:15,252

So this is maybe a problem I would work on

if I would have an infinite amount of

876

01:00:15,252 --> 01:00:18,833

resources I can just fly in the space and

try to find them.

877

01:00:21,026 --> 01:00:24,087

That sounds like a fun endeavor.

878

01:00:24,087 --> 01:00:25,127

Yeah, for sure.

879

01:00:25,247 --> 01:00:26,868

I'd love the answer to that paradox.

880

01:00:26,868 --> 01:00:32,169

And people are interested in the physics

side of things.

881

01:00:32,169 --> 01:00:37,430

There is a whole bunch of physics-related

episodes of this show.

882

01:00:37,430 --> 01:00:39,171

So for sure, refer to that.

883

01:00:39,171 --> 01:00:40,531

I'll put them in the show notes.

884

01:00:40,531 --> 01:00:42,492

My whole playlist about physics episodes.

885

01:00:42,492 --> 01:00:46,453

Yeah, I know.

886

01:00:46,453 --> 01:00:48,558

And I know also you're a big fan of

Aubrey...

887

01:00:48,558 --> 01:00:51,300

Clayton's book, The Bernoulli's Fallacy.

888

01:00:51,300 --> 01:00:59,326

So I also put this episode with Aubrey

Clayton in the show notes for people who

889

01:00:59,326 --> 01:01:00,446

have missed it.

890

01:01:00,747 --> 01:01:02,629

If you have missed it, I really recommend

it.

891

01:01:02,629 --> 01:01:03,990

That was a really good episode.

892

01:01:03,990 --> 01:01:04,470

No, I know.

893

01:01:04,470 --> 01:01:04,890

I know.

894

01:01:04,890 --> 01:01:08,853

I know this episode.

895

01:01:08,853 --> 01:01:09,314

Yeah, awesome.

896

01:01:09,314 --> 01:01:11,075

Well, thanks for listening to the show,

Dimitri.

897

01:01:11,075 --> 01:01:13,817

Awesome.

898

01:01:13,817 --> 01:01:14,434

Well.

899

01:01:14,434 --> 01:01:15,694

Thanks a lot, Mitri.

900

01:01:15,694 --> 01:01:18,576

That was really a treat to have you on.

901

01:01:18,576 --> 01:01:23,499

I'm really happy because I had so many

questions, but you helped me navigate

902

01:01:23,499 --> 01:01:24,319

that.

903

01:01:24,540 --> 01:01:30,563

I learned a lot and I'm sure listeners did

too.

904

01:01:31,024 --> 01:01:35,827

As usual, I put resources in a link to

your website in the show notes for those

905

01:01:35,827 --> 01:01:37,147

who want to dig deeper.

906

01:01:37,248 --> 01:01:40,749

Thank you again, Mitri, for taking the

time and being on this show.

907

01:01:41,254 --> 01:01:42,875

Yeah, thanks for inviting me.

908

01:01:42,875 --> 01:01:44,517

It was a pleasure to talk to you.

909

01:01:44,517 --> 01:01:47,079

Really, super nice and super cool

questions.

910

01:01:49,301 --> 01:01:50,402

I like it.

Previous post
Next post